C# 用空格分隔千位来格式化数字

C# Formatting numbers with spaces delimiting thousands

我正在尝试根据以下要求格式化小数:

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

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

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

但如果数字位数较少,我会在数字前面得到一个白色 space。例如 500.5 给我 " 500,50" 而不是 "500,50"。对于负数,space 放在减号和数字之间:-500.5 给我 "- 500,50".所以我不能简单地 trim 结果。我怎样才能达到我的需要?

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

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