Double.ToString为0返回空

时间:2015-06-02 10:31:29

标签: c# double

任何人都可以帮助我理解为什么“text”变量对于以下代码段为空,

double d = 0;

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

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

2 个答案:

答案 0 :(得分:10)

来自The "#" Custom Specifier

  

请注意,此说明符从不显示不是a的零   有效数字,即使零是字符串中的唯一数字。它   只有当它是数字中的有效数字时才会显示零   正在展示。

如果您想将其显示为00,000,000,000,则可以使用The "0" Custom Specifier。但请记住,如果它与double中的任何数值都不匹配,则此说明符为零。

这意味着(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");

此外,我想提到您的字符串格式中的,。您希望对千位分隔符进行分组(并且因为您的代码中没有使用任何 IFormatProviderCurrentCulture {{3 }}与,字符不同,将显示字符,而不是,

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

答案 1 :(得分:0)

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