为啥逗号在 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 的默认NumberStyles
是Integer
:
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);
【讨论】:
有趣——我没有意识到他们使用了不同的风格。我可以理解其中的一些(例如 AllowDecimalPoint),但似乎奇怪的是 AllowThousands 在两者之间是不同的。谢谢!以上是关于为啥逗号在 int.Parse() 和 decimal.Parse() 中与 InvariantCulture 的行为不同?的主要内容,如果未能解决你的问题,请参考以下文章
C#的(int) /int.Parse()/int.TryParse()/Convent.ToInt32()的区别--推荐使用Int.TryParse()
无论语言环境如何,我如何强制使用点而不是逗号的 Swift Decimal Pad?
为啥 C# decimal ToString 不请求文化和货币?