为什么在InvariantCulture下,逗号在int.Parse()和decimal.Parse()中的表现不同?

14

为什么:

decimal.Parse("1,2,3,45", CultureInfo.InvariantCulture)

返回一个十进制的12345,但是:

int.Parse("1,2,3,45", CultureInfo.InvariantCulture)

会抛出异常吗?我希望同一种文化中逗号被处理的方式相同。如果 decimal.Parse 返回 12345,为什么 int.Parse 不也返回 12345 呢?

1个回答

22

请查看 NumberStyles

int 的默认NumberStylesInteger:

Integer 指定使用AllowLeadingWhite、AllowTrailingWhite和AllowLeadingSign样式。这是一个组合数字样式。

相比之下,decimal 使用的样式为 Number

Number 指定使用AllowLeadingWhite、AllowTrailingWhite、AllowLeadingSign、AllowTrailingSign、AllowDecimalPoint 和 AllowThousands 样式。这是一个组合数字样式。

如果需要更多选项,请使用接受 NumberStyles 参数的重载方法,并提供(例如)NumberStyles.NumberNumberStyles.Any:

int i = int.Parse("1,2,3,45", NumberStyles.Number, CultureInfo.InvariantCulture);

有趣的是,我没有意识到它们使用不同的样式。我可以理解其中一些(例如AllowDecimalPoint),但似乎AllowThousands在两者之间不同很奇怪。谢谢! - Danny Tuppeny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接