【问题标题】: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?

【问题讨论】:

    标签: c# .net parsing globalization cultureinfo


    【解决方案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 在两者之间是不同的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多