15

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

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

免责声明(它并不像您想象的那么简单):

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

6 回答 6

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
于 2008-11-17T15:38:52.860 回答
2

一个旧线程,但没有一个答案让我完全满意。他们中的大多数将零变成空字符串,包括投票最多的字符串。

我认为更好的解决方案是"#,##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.#################")); 
}
于 2011-05-24T17:07:47.210 回答
1

尝试简单地使用“#,#”,这会为数千等添加逗号,但我不知道它是否会保留小数,否则“#,###.########### #########”,或小数点后所需的任意数量的“#”符号。

于 2008-11-17T15:42:04.537 回答
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 链接正是您阅读如何执行此操作的确切位置。

于 2008-11-17T15:37:27.823 回答
0

您可以创建自定义格式字符串 .ToString("###,###.######") 自定义数字格式字符串

于 2008-11-17T15:42:14.430 回答
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;
}
于 2008-11-17T15:51:22.147 回答