Decimal.Parse 和 Double.Parse System.FormatException 不同的行为
本文关键字:Parse FormatException Double System Decimal | 更新日期: 2023-09-27 18:35:29
我不明白为什么在使用decimal.Parse
时必须指定NumberStyles.Float
而不是double.Parse
我可以做:
var tmp = double.Parse("1e-2");
但不是:
var tmp1 = decimal.Parse("1e-2");
因为抛出System.FormatException
(输入字符串格式不正确)
var tmp1 = decimal.Parse("1e-2", System.Globalization.NumberStyles.Float);
有人可以告诉我这种行为背后是否有充分的理由
它的行为就像记录的那样。从Double.Parse
:
s 参数使用 NumberStyles.Float 和 NumberStyles.AllowThousand 标志的组合进行解释。
请注意,NumberStyles.Float
包括NumberStyles.AllowExponent
。
从Decimal.Parse
:
参数 s 使用 NumberStyles.Number 样式进行解释。
NumberStyles.Number
不包括NumberStyles.AllowExponent
。
我无法重现您奇怪的堆栈跟踪,这些跟踪似乎显示相同的调用在工作后失败:
-
Decimal.Parse("1e-2")
对我来说总是失败 -
Decimal.Parse("1e-2", NumberStyles.Float)
总是对我有用 -
Double.Parse("1e-2")
总是对我有用 -
Double.Parse("1e-2", NumberStyles.Float)
总是对我有用
至于为什么两者之间的"默认"数字样式不同 - 我怀疑这是因为double
值通常用于基于指数的表示很常见的科学场景中,但decimal
值通常不是。