为啥逗号在 int.Parse() 和 decimal.Parse() 中与 InvariantCulture 的行为不同?

Posted

技术标签:

【中文标题】为啥逗号在 int.Parse() 和 decimal.Parse() 中与 InvariantCulture 的行为不同?【英文标题】:Why do commas behave differently in int.Parse() and decimal.Parse() with InvariantCulture?为什么逗号在 int.Parse() 和 decimal.Parse() 中与 InvariantCulture 的行为不同? 【发布时间】:2012-01-08 20:02:21 【问题描述】:

为什么会这样:

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

返回小数点 12345,然而:

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

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

【问题讨论】:

【参考方案1】:

See NumberStyles

int 的默认NumberStylesInteger

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);

【讨论】:

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

以上是关于为啥逗号在 int.Parse() 和 decimal.Parse() 中与 InvariantCulture 的行为不同?的主要内容,如果未能解决你的问题,请参考以下文章

C#的(int) /int.Parse()/int.TryParse()/Convent.ToInt32()的区别--推荐使用Int.TryParse()

无论语言环境如何,我如何强制使用点而不是逗号的 Swift Decimal Pad?

为啥 C# decimal ToString 不请求文化和货币?

Java 为啥不提供decimal

为啥在 Python 中 Decimal('0') > 9999.0 为真?

mysql字段类型为decimal,则java 实体类的对应属性类型应该为啥