【问题标题】:Formatting numbers in different cultures在不同文化中格式化数字
【发布时间】:2023-03-11 04:40:02
【问题描述】:

假设文化不变,是否可以在格式中定义与逗号不同的组分隔符?

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Console.WriteLine(String.Format("{0:#,##0}", 2295));

输出:

2,295

期望的输出:

2.295

不变的文化是一项要求,因为来自许多不同语言环境的货币都使用用户定义的格式字符串进行格式化。例如,对于丹麦,他们将价格格式定义为“{0:0},-”,而对于爱尔兰,可能是“€{0:#,##0}”。

【问题讨论】:

    标签: c# .net cultureinfo


    【解决方案1】:

    当您有不同的格式字符串时,这并不意味着您必须使用 InvariantCulture。如果您有德国的格式字符串,例如您使用 Culture("de-de") 格式化此字符串:

    String.Format(CultureInfo.GetCultureInfo( "de-de" ), "{0:0},-", 2295) //will result in 2.295,-
    String.Format(CultureInfo.GetCultureInfo( "en-us" ), "{0:0},-", 2295) //will result in 2,295,-
    

    您也可以指定您的自定义number format info

    NumberFormatInfo nfi = new NumberFormatInfo( )
    {
        CurrencyGroupSeparator = ":"
    };
    String.Format(nfi, "{0:0},-", 2295) //will result in 2:295,-
    

    【讨论】:

    • 我不明白你的回答。你能详细说明一下吗?
    • 我不够清楚。我没有关于它是什么文化的信息(至少不是直接以“en-us”-kinda 格式。所以我希望让客户以通用格式编写他们的 priceformatting-strings,而不考虑它是什么文化将在下执行。我想这是不可能的,所以我添加了一个带有文化识别的列,并按照你上面的描述使用它。:)
    【解决方案2】:

    正常的方法是使用不变的文化。

    您确实以 Invariant 样式指定格式,但会替换正确的符号,#,##0.00 将显示为 1.234,501,235.50,具体取决于实际使用的文化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 2011-07-27
      • 2014-08-22
      • 1970-01-01
      相关资源
      最近更新 更多