用逗号格式化数字,但保留小数

时间:2008-11-17 15:30:24

标签: .net string formatting

我想将数字分组为数千,但也输出,但小数实际上是数字。我无法弄清楚格式字符串。

 1000 => 1,000
 100000 => 100,000
 123.456 => 123.456
 100000.21 => 100,000.21
 100200.123456 => 100,200.123456

免责声明(并不像你想象的那样直截了当):

  • 请不要指向我this question它没有回答我的问题
  • 请不要指向MS DN,文章没有帮助我。 (如果您认为我读错了,请自己阅读并发布正确答案)
  • .ToString("n")不起作用,它会对数字进行舍入

6 个答案:

答案 0 :(得分:10)

这似乎完全符合您的要求:

public void Code(params string[] args)
{
    Print(1000);
    Print(100000);
    Print(123.456);
    Print(100000.21 );
    Print(100200.123456);
}

void Print(double n)
{
    Console.WriteLine("{0:###,###.#######}", n);
}

1,000
100,000
123.456
100,000.21
100,200.123456

答案 1 :(得分:2)

一个旧帖子,但没有一个答案对我来说完全令人满意。他们中的大多数都将零变成空字符串,包括具有最多upvotes的字符串。

我认为更好的解决方案是"#,##0.#################",它至少会显示零。但它仍然很难看。必须有更好的方法。

double[] vals = new double[] { 0.0, 0.1234, -0.1234, 1.0, 
                               123456789.123456, 123456789.0, 
                               0.123456789123456 };
foreach (double val in vals) 
{ 
    Console.WriteLine(val + ": " + val.ToString("#,##0.#################")); 
}

答案 2 :(得分:1)

尝试简单地使用“#,#”,这会为成千上万的人添加逗号,但我不知道它是否会保留小数,否则“#,###。######## ############“,或小数点后您想要的任何数量的'#'符号。

答案 3 :(得分:0)

试试这个:

VB:

Dim vals() As Double = {1000, 100000, 123.456, 100000.21, 100200.123456}
For Each val As Double in vals
   Console.WriteLine(val.ToString("###,###.#########"))
Next val

C#:

double[] vals = new double[] {1000, 100000, 123.456, 100000.21, 100200.123456};
foreach (double val in vals)
{
    Console.WriteLine(val.ToString("###,###.#########"));
}

问题是没有格式来处理任意数量的小数。但是,由于你只能存储一个非常有限的精度,你可以使用它并根据需要添加一些#字符来覆盖它,假设你愿意让它切断任何无关紧要的0' 。

您发布的MSDN链接是您要阅读如何执行此操作的确切位置。

答案 4 :(得分:0)

您可以创建自定义格式字符串.ToString(“###,###。######”) Custom Numeric Format Strings

答案 5 :(得分:0)

这可能有点慢,但它会做你想要的。

public static string FormatNumber(double num)
{
    string s = num.ToString();
    string result = "";

    if(s.IndexOf('.') != -1)
    {
        result = s.Substring(s.IndexOf('.'));
        s = s.Substring(0, s.IndexOf('.'));
    }

    while (s.Length > 3)
    {
        result = "," + s.Substring(s.Length - 3);
        s = s.Substring(0, s.Length - 3);
    }
    if (s.Length == 0)
        return result.Substring(1);
    return s + result;
}