如何用逗号和小数格式化C#中的数字?

时间:2010-07-22 18:06:00

标签: c# .net

我的小数点后面有一个可变位数的数字。我想用逗号和所有十进制数格式化数字。

例如:42,023,212.0092343234

如果我使用ToString(“N”)我只得到2位小数,ToString(“f”)给我所有小数都没有逗号。我如何获得两者?

6 个答案:

答案 0 :(得分:12)

不确定(现在无法测试)但是这样的工作会起作用吗?

"#,##0.################"

答案 1 :(得分:4)

string.Format("{0:#,##0.############}", value);

最多可以给你12位小数。

“所有后续数字”没有自定义格式说明符,因此这样的内容最接近您想要的内容。

另请注意,您受变量精度的限制。 double只有15-16位精度,所以当你的左手边变小时,小数位数会下降。

答案 2 :(得分:2)

更新:查看MSDN documentation on the System.Double type,我看到了这一点:

  

默认情况下,Double值包含15   但精度的十进制数字   最多保留17位数字   内部。

实际上,我认为pdr's on to something。就这样做:

// As long as you've got at least 15 #s after the decimal point,
// you should be good.
value.ToString("#,#.###############");

这是一个想法:

static string Format(double value)
{
    double wholePart = Math.Truncate(value);
    double decimalPart = Math.Abs(value - wholePart);
    return wholePart.ToString("N0") + decimalPart.ToString().TrimStart('0');
}

示例:

Console.WriteLine(Format(42023212.0092343234));

输出:

42,023,212.00923432409763336
哈,嗯,正如你所看到的,由于(我认为)浮点数学问题,这给出了不完美的结果。那好吧;无论如何,这是一个选择。

答案 3 :(得分:0)

尝试ToString("N2")

答案 4 :(得分:0)

让我们尝试一下

[DisplayFormat(DataFormatString = "{0:0,0.00}")]

答案 5 :(得分:-1)

这是达到你期望的方式......

decimal d = 42023212.0092343234M;

NumberFormatInfo nfi  = (NumberFormatInfo) CultureInfo.InvariantCulture.NumberFormat.Clone();

nfi.NumberDecimalDigits= (d - Decimal.Truncate(d)).ToString().Length-2;

Console.WriteLine(d.ToString("N",nfi));

有关NumberFormatInfo的更多详细信息..请查看MSDN ..

http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx