我想将数字分组为数千,但也输出,但小数实际上是数字。我无法弄清楚格式字符串。
1000 => 1,000
100000 => 100,000
123.456 => 123.456
100000.21 => 100,000.21
100200.123456 => 100,200.123456
免责声明(并不像你想象的那样直截了当):
.ToString("n")
不起作用,它会对数字进行舍入答案 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;
}