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

Dan*_*eny 13 .net c# globalization parsing cultureinfo

为什么:

decimal.Parse("1,2,3,45", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)

返回12345的小数,但是:

int.Parse("1,2,3,45", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 17

看到 NumberStyles

NumberStylesint 的默认值是Integer:

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

比较Number(用于decimal):

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

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

int i = int.Parse("1,2,3,45", NumberStyles.Number, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)