我尝试使用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
答案 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,
这意味着你的字符串可以有一个;
Char.IsWhiteSpace
返回true
)PositiveSign
和NegativeSign
)NumberDecimalSeparator
NumberGroupSeparator
由于NumberStyles.Number
有AllowDecimalPoint
,因此它在您的字符串中符合.
,但此样式没有AllowExponent
这就是为什么它可以&#39} ; t在你的字符串中解析e-02
。
这就是您需要使用Decimal.Parse Method (String, NumberStyles)
overload的原因,因为您可以自己指定NumberStyles
。