2008-11-17 46 views
15

我想将数字分组为两位数,但也会输出数字,但实际上数字中的小数位数。我无法弄清格式字符串。使用逗号格式化数字,但保留小数

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

免责声明(如你认为这是不是直线前进):

  • 请不要点我this question没有回答我的问题
  • 请不要点我MSDN,文章没有帮助我。 (如果你相信我读他们有误,自己阅读,并张贴了正确的答案)
  • .ToString("n")不起作用,便将数字

回答

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 
+0

如果你有超过7个小数位,是不是会截断它呢? – MusiGenesis 2008-11-17 15:43:56

+0

似乎是这样,这不是理想的,但我可以推到12小数位,这应该是我的目的的限制。 – 2008-11-17 15:45:27

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链接是您要阅读的确切位置。

1

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

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; 
} 
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.#################")); 
}