Double.ToString returns 空为 0

Double.ToString returns empty for 0

谁能帮我理解为什么下面代码段的 "text" 变量为空,

double d = 0;

var text = d.ToString("##,###,###,###");

如果我将 d 的值更改为任何非零值,我将获得其正确的字符串表示形式。

来自The "#" Custom Specifier

Note that this specifier never displays a zero that is not a significant digit, even if zero is the only digit in the string. It will display zero only if it is a significant digit in the number that is being displayed.

如果你想显示为00,000,000,000,你可以使用The "0" Custom Specifier代替。但请记住,如果此说明符与双精度值中的任何数值都不匹配,则此说明符置零。

这意味着 (15).ToString("00,000,000,000") 将生成 00,000,000,015 作为结果。

如果您想显示 0 以及其他值,只需将您的最后一位数字格式从 # 更改为 0,例如 ##,###,###,##0

但是 我认为更好的方法可能是使用 The numeric "N" format specifier。此说明符生成千位组分隔符及其大小、小数点分隔符及其大小(您可以使用 N0 省略此部分)可能的负号及其模式。

double d = 0;
var text = d.ToString("N0");

我还想在您的字符串格式中提及 ,。你想像千位分隔符一样分组,(因为你不使用 any IFormatProvider in your code) if your CurrentCulture's NumberGroupSeparator 不同于 , 字符,that[=将显示 56=] 个字符,而不是 ,.

例如;我在土耳其,我当前的文化是 tr-TR,这种文化的 . 作为 NumberGroupSeparator。这就是为什么您的代码将在我的机器中生成 ##.###.###.### 格式而不是 ##,###,###,### 的结果。

对于字符串格式,#代表可选位置。例如,如果数字等于或大于 10,格式字符串如“#0”将显示第一个数字字符。因此,如果要显示数字,则需要将主题标签转换为零。