关于c#:为什么NumberStyles.AllowThousands适用于int.Parse但不适用于本例中的double.Parse?


Why does NumberStyles.AllowThousands work for int.Parse but not for double.Parse in this example?

为了解析一个表示数字的字符串,用逗号将千位数字与其余数字分隔开,我尝试了

1
2
int tmp1 = int.Parse("1,234", NumberStyles.AllowThousands);
double tmp2 = double.Parse("1,000.01", NumberStyles.AllowThousands);

第一条语句可以运行,而第二条语句由于通知而失败

An unhandled exception of type 'System.FormatException' occurred in
mscorlib.dll

Additional information: Input string was not in a correct format.

为什么两者都不成功?谢谢。


您应该传递AllowDecimalPointFloatNumber样式(后两种样式只是包含AllowDecimalPoint标志的多个数字样式的组合):

1
double.Parse("1,000.01", NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint)

当为解析方法提供某种数字样式时,可以指定字符串中可以出现的元素的确切样式。未包含的样式视为不允许。解析双值的默认标志组合(不显式指定样式时)是NumberStyles.FloatNumberStyles.AllowThousands标志。

考虑一下分析整数的第一个例子——您还没有传递AllowLeadingSign标志。因此,以下代码将引发异常:

1
int.Parse("-1,234", NumberStyles.AllowThousands)

对于这些数字,应添加AllowLeadingSign标志:

1
int.Parse("-1,234", NumberStyles.AllowThousands | NumberStyles.AllowLeadingSign)