我想将数字组合成千位,但也输出小数位数实际上是数字。我无法弄清楚格式字符串。
1000 => 1,000
100000 => 100,000
123.456 => 123.456
100000.21 => 100,000.21
100200.123456 => 100,200.123456
免责声明(它并不像您想象的那么简单):
这似乎完全符合您的要求:
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.#################"
,它至少显示零。不过还是很丑。肯定有更好的办法。
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.#################"));
}
尝试简单地使用“#,#”,这会为数千等添加逗号,但我不知道它是否会保留小数,否则“#,###.########### #########”,或小数点后所需的任意数量的“#”符号。
试试这个:
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 链接正是您阅读如何执行此操作的确切位置。
您可以创建自定义格式字符串 .ToString("###,###.######") 自定义数字格式字符串
这可能有点慢,但它会做你想做的事。
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;
}