Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中设置带有逗号和小数的数字格式?_C#_.net - Fatal编程技术网

如何在C#中设置带有逗号和小数的数字格式?

如何在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

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

例如:42023212.0092343234


如果我使用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));