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

本文关键字:Parse InvariantCulture decimal int 为什么 | 更新日期: 2023-09-27 18:16:10

为什么:

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

返回一个小数12345,然而:

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

抛出异常?我希望在相同的文化中,逗号被同样对待。如果decimal.Parse返回12345,为什么int.Parse不返回12345?

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

参见NumberStyles

int的默认NumberStylesInteger:

Integer表示使用AllowLeadingWhite、AllowTrailingWhite和AllowLeadingSign三种样式。这是一个合数样式。

比较Number(用于decimal):

Number表示使用AllowLeadingWhite、AllowTrailingWhite、AllowLeadingSign、AllowTrailingSign、AllowDecimalPoint和allowthousand四种样式。这是一个合数样式。

如果你想要更多,使用接受NumberStyles的过载,并提供(例如)NumberStyles.NumberNumberStyles.Any:

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