如何在C#中设置带有逗号和小数的数字格式?
我有一个小数点后位数可变的数字。我想用逗号和所有十进制数字格式化数字 例如:42023212.0092343234如何在C#中设置带有逗号和小数的数字格式?,c#,.net,C#,.net,我有一个小数点后位数可变的数字。我想用逗号和所有十进制数字格式化数字 例如:42023212.0092343234 如果我使用ToString(“N”),我只得到2个小数,ToString(“f”)给我所有的小数,没有逗号。如何获得两者?尝试ToString(“N2”)更新:查看,我看到以下内容: 默认情况下,双精度值包含15 精度的小数位数,尽管 最多保留17位数字 内部 所以我想,事实上。只要这样做: // As long as you've got at least 15 #s after
如果我使用ToString(“N”),我只得到2个小数,ToString(“f”)给我所有的小数,没有逗号。如何获得两者?尝试
ToString(“N2”)
更新:查看,我看到以下内容:
默认情况下,双精度值包含15
精度的小数位数,尽管
最多保留17位数字
内部
所以我想,事实上。只要这样做:
// 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
42,023,212.00923432409763336
哈,好吧,正如你所看到的,由于(我认为)浮点数学问题,这给出了不完美的结果。哦,好吧;无论如何,这是一个选项。不确定(目前无法测试),但是否需要这样的工作
"#,##0.################"
将给您最多12位小数
“后面的所有数字”没有自定义格式说明符,因此类似这样的内容将最接近您想要的内容
还要注意的是,您受到变量精度的限制。双精度只有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
让我们试试这个
[DisplayFormat(DataFormatString=“{0:0,0.00}”)]
只显示最后2个小数点,我希望它显示所有小数点,但小数点的数量将从0变为-?这可能会起作用,但我希望得到一个格式字符串,可以提供给网格控件,或者任何其他能够理解.Net格式的东西,这样它就可以为我进行格式设置,我就可以给它实际值。到目前为止,最好的方法是,只要小数不超过#的数量,它就可以工作。。。我希望避免这个选择,但如果这是唯一的办法……好主意。我说这是最好的答案。可能是因为你在对字符串进行双重转换。
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));