5

我尝试使用如下所述的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,你知道为什么会这样吗?

谢谢,伊亚尔

4

2 回答 2

9

shree.pat18 的回答当然是对的。但是,如果您允许我,我想多解释一下这个问题。

让我们看看Decimal.ToParse(string)方法是如何 实现的;

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

如您所见,此方法NumberStyles.Number默认使用。它是一种合数样式,其实现方式如下;

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

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

由于NumberStyles.Numberhas AllowDecimalPoint,它适合.您的字符串,但这种样式没有AllowExponent这就是为什么它无法e-02在您的字符串中解析。

这就是为什么您需要使用Decimal.Parse Method (String, NumberStyles)重载,因为您可以指定NumberStyles自己。

于 2014-05-12T11:06:44.973 回答
6

尝试这个:

using System.Globalization;
using System.Text;

....

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

为了解析指数格式的数字,您需要按照此处NumberStyles Enumeration所述设置适当的标志。

于 2014-05-12T08:55:15.810 回答