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

时间:2017-04-05 20:00:13

标签: c#

要解析表示数字的字符串,用逗号分隔千位数字,我试过

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

第一个语句可以运行,而第二个语句因通知失败

  

发生了'System.FormatException'类型的未处理异常   mscorlib.dll中

     

其他信息:输入字符串的格式不正确。

为什么两者都没有成功?感谢。

1 个答案:

答案 0 :(得分:13)

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

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

当您为解析方法提供某种数字样式时,您可以指定字符串中可能出现的 exact 元素样式。不包括的样式被视为不允许。用于解析double值的标志的默认组合(当您未明确指定样式时)是NumberStyles.FloatNumberStyles.AllowThousands标志。

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

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

对于此类数字,应添加AllowLeadingSign标志:

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