我需要将字符串“ 1.2345E-02”(以指数表示法表示的数字)解析为十进制数据类型,但是Decimal.Parse("1.2345E-02")
只会引发错误
这是一个浮点数,您必须告诉它:
decimal d = Decimal.Parse("1.2345E-02", System.Globalization.NumberStyles.Float);
如果指定NumberStyles.Float
,则有效:
NumberStyles.Float
我不完全确定为什么默认情况下不支持此功能-默认为使用decimal x = decimal.Parse("1.2345E-02", NumberStyles.Float);
Console.WriteLine(x); // Prints 0.012345
,它使用AllowLeadingWhite,AllowTrailingWhite,AllowLeadingSign,AllowTrailingSign,AllowDecimalPoint和AllowThousands样式。可能与性能有关;我猜想,指定指数是[[相对很少。
decimal.TryParse函数,例如:
NumberStyles.Number
作为NumberStyles的替代方法。如果您确定自己的格式,则可以使用任何特定的集合。例如:
decimal result; if( !decimal.TryParse("1.2345E-02", NumberStyles.Any, CultureInfo.InvariantCulture, out result) ) { // do something in case it fails? }
NumberStyles.AllowExponent | NumberStyles.Float
Decimal.Parse中指定System.Globalization.NumberStyles.Float的微妙之处可能会导致System.FormatException,因为您的系统可能是等待以','而不是'。'格式的数字例如,以法语表示法,“ 1.2345E-02”无效,您必须先将其转换为“ 1,2345E-02”。
最后,使用以下内容:
decimal d = Decimal.Parse("1.2345E-02", System.Globalization.NumberStyles.Float);
Decimal.Parse(valueString.Replace('.',','), System.Globalization.NumberStyles.Float);
会更改处理字符串的规则,并导致与NumberStyles.Float
不同的输出(NumberStyles.Number
使用的默认规则)。