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

12

我有一个数字,小数点后的位数是可变的。我想用逗号和所有小数来格式化这个数字。

例如:42,023,212.0092343234

如果我使用 ToString("N") ,我只能得到 2 个小数,而 ToString("f") 可以给我所有的小数但没有逗号。那么我该如何同时得到逗号和所有小数呢?

6个回答

13

我不确定(现在也无法测试),但是这样的东西会起作用吗?

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

到目前为止,只要小数位数不超过数字的#号数量,它就能正常工作...我本来希望避免这个选项,但如果这是唯一的方法..... - NotDan
好的,这是最佳答案。 - Dan Tao

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

该值将提供高达12位小数。

没有一个自定义格式说明符可以表示“所有后续数字”,因此类似于这样的内容最接近您想要的。

请注意,您的变量精度受限。双精度只有15-16位有效数字,因此当左侧变得更大时,小数位数将减少。


3
更新:查看System.Double类型的MSDN文档,我发现如下内容:

默认情况下,Double值包含15个小数位精度,尽管内部维护了最大17个数字。

因此,我认为pdr的做法是正确的。只需执行以下操作:

// 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

哈,你看,这个结果并不完美,可能是由于浮点数计算问题所致。无论如何,这是一种选择。


那可能会有用,但我想得到一个格式字符串,以便可以将其提供给网格控件或任何其他了解 .Net 格式的内容,使其能够为我进行格式化并只需提供实际值。 - NotDan

0

我们来试试这个

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


0

尝试使用 ToString("N2")


只显示最后两位小数,我希望它能够显示所有小数,但小数位数会从0到?不等。 - NotDan

-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


可能是因为你正在进行双重转换成字符串。 - Josh Stodola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接