如何用逗号和小数格式化C#中的数字?
我在小数点后有一个数字可变的数字。我想用逗号和所有十进制数字格式化数字。如何用逗号和小数格式化C#中的数字?
例如:42,023,212.0092343234
如果我使用的ToString( “N”),我只得到2位小数,的ToString( “F”)给了我所有小数没有逗号。我如何获得这两个?
不确定(现在无法测试),但会有这样的工作吗?
"#,##0.################"
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
哈,好吧,正如你所看到的,这给出了不完美的结果,归因于(我认为)浮点数学问题。好吧;无论如何,这是一个选项。
这可能会工作,但我想获得一个格式字符串,我可以给一个网格控制,或其他任何理解。净格式,所以它可以为我做格式,我可以给它的实际价值。 – 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
可能是因为你正在对弦线进行双重投射。 – 2010-07-22 20:13:12
到目前为止,只要小数不超过#的数量,它就会工作......我希望避免这个选择,但如果它是唯一的方法..... – NotDan 2010-07-22 18:29:24
好的呼叫。我说这是最好的答案。 – 2010-07-22 18:31:27