【问题标题】:C# Formatting numbers with spaces delimiting thousandsC# 用空格分隔千位的数字格式
【发布时间】:2018-11-17 10:29:36
【问题描述】:

我正在尝试按照以下要求格式化小数:

  • 千位用空格“”隔开
  • 小数点由一个分隔 逗号“,”(这是通过使用适当的文化来实现的,在此 克罗地亚语)
  • 小数点后有两位数。

到目前为止,我得到了这个:

String.Format(new CultureInfo("hr-HR"), "{0:# ##0.00}", input)

如果数字在小数点前有 4 位或更多位,则此方法效果很好。例如,值 5500.5 给我 "5 500,50"-5500.5 给我 "-5 500,50",这就是我想要的。

但如果数字的位数较少,我会在数字前面出现一个空格。例如 500.5 给了我 "500,50" 而不是 "500,50"。如果是负数,则在减号和数字之间放置空格:-500.5 给我 "- 500,50"。所以我不能简单地修剪结果。我怎样才能达到我的需要?

【问题讨论】:

  • @HansPassant 否定破坏了这种方法。我也有同样的想法。

标签: c# string-formatting


【解决方案1】:

最简单的方法可能是在以这种方式格式化之前检查input 是否超过 1000 / 小于 -1000。

if(input >= 1000 || input <= -1000){
    // use String.Format(new CultureInfo("hr-HR"), "{0:# ##0.00}", input)
}else{
    // just use input.ToString()?
}

可能有一种方法可以强制 string.format 做你想做的事,但为什么要让问题过于复杂呢?

【讨论】:

    【解决方案2】:

    您可以使用自定义NumberFormatInfo 来格式化数字。

    var nfi = new NumberFormatInfo();
    nfi.NumberGroupSeparator = " "; // set the group separator to a space
    nfi.NumberDecimalSeparator = ","; // set decimal separator to comma
    

    然后使用格式化数字

    number.ToString("N2", nfi); // numeric format with 2 decimal digits
    

    这给了你

    (5500.5).ToString("N2", nfi)  // "5 500,50"
    (-500.5).ToString("N2", nfi)  // "-500,50"
    (-5500.5).ToString("N2", nfi) // "-5 500,50"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多