C#格式化数字,空格分隔数千

时间:2018-06-07 13:22:30

标签: c# string-formatting

我尝试使用以下要求格式化小数:

  • 成千上万的人被空格隔开" "
  • 小数点由a分隔 逗号"," (这是通过使用适当的文化来实现的 案例克罗地亚语)
  • 小数点后有两位数。

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

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

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

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

2 个答案:

答案 0 :(得分:9)

您可以使用自定义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"

答案 1 :(得分:0)

最简单的方法可能是在以这种方式格式化之前检查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来做你想做的事情,但为什么会使问题过于复杂?