【问题标题】:String format number with three sections as String.Format(“{0:$#,##0.00;($#,##0.00);Zero}”, value);字符串格式号,三段为 String.Format(“{0:$#,##0.00;($#,##0.00);Zero}”, value);
【发布时间】:2016-01-06 07:07:03
【问题描述】:

我正在实现包含三个部分的字符串格式数字

DataFormatString="{}{0:$#,##0.00;($#,##0.00);''}"

即:

input 120 result $120.00
input -120 result ($120.00)
input 0 result ''

问题是美元符号是硬编码的,我希望我的应用程序全球化。我试过这样的事情:

DataFormatString="{}{0:C;C;''}"

但没用。

【问题讨论】:

    标签: c# number-formatting


    【解决方案1】:

    也许尝试采用这种方法:

    var DataFormatString="$#,##0.00;($#,##0.00);''";
    
    var amount = 1342.56m;
    
    var formatted =
        amount
            .ToString(DataFormatString)
            .Replace("$", CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol);
    

    唯一的缺点是,如果这是该货币的标准,它不会正确地将货币符号放在数字的末尾。

    【讨论】:

      【解决方案2】:

      您可以像这样使用string.Format 和IFormatProvider 的重载:

      string DataFormatString="{0:C}";
      string output = string.Format(CultureInfo.CreateSpecificCulture("culture"),DataFormatString,input)
      

      Demo

      但是,正如 Soner Gonul 所观察到的,这仍然不会生成 '' 作为 0 的输出。

      【讨论】:

      • 可悲的是,这仍然为0生成$0.00 :(
      【解决方案3】:

      据我所知,没有 直接 格式可以为这些输入提供您想要的 3 个结果。

      对于前两种格式,您可以使用The "C" format specifier 和en-US 文化(将$ 作为CurrencySymbol)使用2 作为精度说明符,例如;

      (120).ToString("C2", CultureInfo.GetCultureInfo("en-US"))  // $120.00
      (-120).ToString("C2", CultureInfo.GetCultureInfo("en-US")) // ($120.00)
      

      但是对于0,这会生成$0.00,这不是你想要的。

      作为更好的解决方案,请检查Enigmativity's answer,而不是它也处理0 值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-09
        • 2011-06-07
        • 2017-10-25
        • 2020-06-28
        • 1970-01-01
        • 1970-01-01
        • 2014-07-20
        • 2012-02-18
        相关资源
        最近更新 更多