Decimal.Parse抛出FormatException

时间:2014-05-12 08:50:07

标签: c# decimal formatexception

我尝试使用decimal.parse,如下所述: http://msdn.microsoft.com/en-us/library/cafs243z(v=vs.110).aspx

所以我从这个页面复制了以下例子:

   string value;
   decimal number;
   value = "1.62345e-02";
   try
   {
       number = Decimal.Parse(value);
       Console.WriteLine("'{0}' converted to {1}.", value, number);
   }
   catch (FormatException)
   {
       Console.WriteLine("Unable to parse '{0}'.", value);
   }

我得到了一个FormatException, 你知道它为什么会发生吗?

感谢, 的Eyal

2 个答案:

答案 0 :(得分:5)

试试这个:

using System.Globalization;
using System.Text;

....

number = Decimal.Parse(value, NumberStyles.AllowExponent|NumberStyles.AllowDecimalPoint);

为了以指数格式解析数字,您需要按here所述的NumberStyles Enumeration设置相应的标记。

答案 1 :(得分:5)

shree.pat18's answer当然是对的。但如果你让我,我想再解释一下这个问题..

让我们看一下Decimal.ToParse(string) method implemented;

的方式
public static Decimal Parse(String s)
{
   return Number.ParseDecimal(s, NumberStyles.Number, NumberFormatInfo.CurrentInfo);
}

如您所见,此方法默认使用NumberStyles.Number。它是一个复合数字样式,它的implemented喜欢;

Number   = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |
           AllowDecimalPoint | AllowThousands,

这意味着你的字符串可以有一个;

由于NumberStyles.NumberAllowDecimalPoint,因此它在您的字符串中符合.,但此样式没有AllowExponent这就是为什么它可以&#39} ; t在你的字符串中解析e-02

这就是您需要使用Decimal.Parse Method (String, NumberStyles) overload的原因,因为您可以自己指定NumberStyles