如何在C#中用空格分隔数千个?

Mik*_*yev 36 c# decimal custom-formatting

假设我有以下十进制数,我必须格式化,以便每千个应该用空格分隔:

 897.11 to 897.11
 1897.11 to 1 897.11
 12897.11 to 12 897.11
 123897.11 to 123 897.11
Run Code Online (Sandbox Code Playgroud)

我试过Decimal.ToString("0 000.00").虽然这个数字是1897.11时效果很好.但当它是897.11时,我得到0 897.11.

Tim*_* S. 63

使用自NumberFormatInfo定义NumberGroupSeparator属性传递自定义,并使用该#,#格式告诉它执行数字组.此示例使用不变文化的数字格式作为其基础.

var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = " ";
string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11"
Run Code Online (Sandbox Code Playgroud)

  • +1,我编辑了这个答案来正确处理零值 - 之前的格式字符串"#,#.00"导致零表示为".00"现在它是"0.00" (3认同)

Ada*_*rth 18

您需要一个自定义数字格式提供程序,您可以自己更改字符:

    static void Main(string[] args)
    {
        decimal d = 2000000;

        var f = new NumberFormatInfo {NumberGroupSeparator = " "};

        var s = d.ToString("n", f); // 2 000 000.00
    }
Run Code Online (Sandbox Code Playgroud)

在这里我还指定将其格式化为数字(使用"n"),请参阅此链接以获取其他格式选项:

标准数字格式字符串

在这种情况下,如果您格式化为货币或百分比,它将无法工作,因为您可能已经注意到了 NumberFormatInfo具有单独的属性.

可以在上找到当前的文化格式信息System.Globalization.CultureInfo.CurrentCulture.NumberFormat.


Cha*_*ana 6

使用自定义格式字符串,但使用'#'不是'0是0是强制令牌,无论数字多长,井号(#)是可选令牌,它只会用于数字在号码.

  Decimal.ToString("# ###.00")  
Run Code Online (Sandbox Code Playgroud)

注意.我会把它留在这里,但@Tim S的回答是更好的.

当我尝试这个时,我看到它只生成第一个分隔符...我猜分隔符只适用于逗号和句点.作为一种解决方法(最多可达到预期的最大大小),请尝试使用此方法.

  Decimal.ToString("# ### ### ### ###.00")  
Run Code Online (Sandbox Code Playgroud)

  • @Tin S答案比我好.不知道`NumberFormatInfo`存在 (2认同)

小智 6

试试这个

int testNumber = 134566548;
Console.WriteLine(string.Format("{0:N}", testNumber));
Run Code Online (Sandbox Code Playgroud)

您将收到:134 566 548,00

不要忘记你的文化.


Md.*_*lam 5

瑞典 使用千位分隔符作为空格(" "),使用小数点分隔符作为逗号(,)。我们可以通过以下方式实现这一点。

decimal myNumbber = 5878.476M;
var swedishCulture = new CultureInfo("sv-SE");           
swedishCulture.NumberFormat.NumberDecimalSeparator = ",";
swedishCulture.NumberFormat.NumberGroupSeparator = " ";
var s = myNumbber.ToString("#,###.00", swedishCulture);
Run Code Online (Sandbox Code Playgroud)

这给出了输出

"5 878,48"
Run Code Online (Sandbox Code Playgroud)