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

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

问题描述:

我在小数点后有一个数字可变的数字。我想用逗号和所有十进制数字格式化数字。如何用逗号和小数格式化C#中的数字?

例如:42,023,212.0092343234

如果我使用的ToString( “N”),我只得到2位小数,的ToString( “F”)给了我所有小数没有逗号。我如何获得这两个?

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

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

到目前为止,只要小数不超过#的数量,它就会工作......我希望避免这个选择,但如果它是唯一的方法..... – NotDan 2010-07-22 18:29:24

+0

好的呼叫。我说这是最好的答案。 – 2010-07-22 18:31:27

尝试ToString("N2")

+0

只显示最后2小数点,我希望它显示所有这些,但小数的数量将从0-? – NotDan 2010-07-22 18:16:56

UPDATE:纵观MSDN documentation on the System.Double type,我看到:

默认情况下,双值包含的精度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

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

+0

这可能会工作,但我想获得一个格式字符串,我可以给一个网格控制,或其他任何理解。净格式,所以它可以为我做格式,我可以给它的实际价值。 – NotDan 2010-07-22 18:23:12

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

会给你最多12位小数。

没有一个“所有后面的数字”的自定义格式说明符,所以类似这样的将最接近你想要的。

请注意,您受限于变量的精度。 A double只有15-16个数字的精度,所以当您的左手边变大时,小数位数将会减少。

这里有点要达到您的期望的方式......

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

+0

可能是因为你正在对弦线进行双重投射。 – 2010-07-22 20:13:12