问题 为什么逗号在使用InvariantCulture的int.Parse()和decimal.Parse()中表现不同?


为什么:

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

返回12345的小数,但是:

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

抛出异常?我希望对于相同的文化,逗号的处理方式是相同的。如果 decimal.Parse 返回12345,为什么不 int.Parse 还返回12345?


11266
2017-11-29 13:24


起源



答案:


看到 NumberStyles

默认值 NumberStyles 对于int是 Integer

整数表示使用AllowLeadingWhite,AllowTrailingWhite和AllowLeadingSign样式。这是一种复合数字样式。

相比于 Number (用于 decimal):

Number表示使用AllowLeadingWhite,AllowTrailingWhite,AllowLeadingSign,AllowTrailingSign,AllowDecimalPoint和AllowThousands样式。这是一种复合数字样式。

如果您想要更多,请使用接受的重载 NumberStyles和供应(例如) NumberStyles.Number 要么 NumberStyles.Any

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

15
2017-11-29 13:30



有趣 - 我没有意识到他们使用了不同的风格。我可以理解其中的一些(例如AllowDecimalPoint),但看起来很奇怪,AllowThousands在两者之间是不同的。谢谢! - Danny Tuppeny


答案:


看到 NumberStyles

默认值 NumberStyles 对于int是 Integer

整数表示使用AllowLeadingWhite,AllowTrailingWhite和AllowLeadingSign样式。这是一种复合数字样式。

相比于 Number (用于 decimal):

Number表示使用AllowLeadingWhite,AllowTrailingWhite,AllowLeadingSign,AllowTrailingSign,AllowDecimalPoint和AllowThousands样式。这是一种复合数字样式。

如果您想要更多,请使用接受的重载 NumberStyles和供应(例如) NumberStyles.Number 要么 NumberStyles.Any

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

15
2017-11-29 13:30



有趣 - 我没有意识到他们使用了不同的风格。我可以理解其中的一些(例如AllowDecimalPoint),但看起来很奇怪,AllowThousands在两者之间是不同的。谢谢! - Danny Tuppeny