我不明白为什么在使用NumberStyles.Float
时我必须指定decimal.Parse
而不是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);
有人可以告诉我这种行为背后是否有充分的理由
答案 0 :(得分:3)
它只是表现得有记录。来自Double.Parse
:
使用NumberStyles.Float和NumberStyles.AllowThousands标志的组合解释s参数。
请注意,NumberStyles.Float
包含NumberStyles.AllowExponent
。
使用NumberStyles.Number样式解释参数s。
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
值通常 在基于指数的表示很常见的科学场景中使用,但{ {1}}值通常不是。