Double.ToString对于0返回空字符串。

4

有谁能帮我理解下面片段为什么“text”变量为空?

double d = 0;

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

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

3
如果您希望字符串不为空,请尝试使用 var text = d.ToString("##,###,###,##0"); - Blas Soriano
你想要的格式已经有了,d.ToString("N0") - Franck
2个回答

11

来自 "#" 自定义格式说明符

请注意,此说明符从不显示非显著数字的零,即使在字符串中零是唯一的数字。它仅在被显示的数字中零是一个显著数字时才会显示。

如果您想将其显示为 00,000,000,000,则可以使用"0" 自定义格式说明符。但请记住,此说明符将在双精度值中找不到任何数值时放置零。

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

如果您想显示0以及其他值,只需将最后一位数字格式从“#”更改为“0”,例如“##,###,###,##0”。
但是,我认为更好的方法是使用数字“N”格式说明符。此说明符生成千位分隔符及其大小、小数点分隔符及其大小(您可以使用“N0”省略此部分)、可能的负号及其模式。
double d = 0;
var text = d.ToString("N0");

此外,我想提到在您的字符串格式中使用逗号,。如果您想要像千位分隔符一样进行分组(并且由于您的代码中未使用任何IFormatProvider ),如果您CurrentCultureNumberGroupSeparator与逗号,字符不同,则会显示该字符,而不是逗号,
例如,我在土耳其,并且我的当前文化是tr-TR,此文化将.作为NumberGroupSeparator。这就是为什么在我的机器上,您的代码将生成##.###.###.###格式的结果,而不是##,###,###,###的原因。

1
谢谢您提供这个信息!这解释得很清楚。 - theraneman

0

关于字符串格式化,#代表可选的位置。例如,像“#0”这样的格式字符串将在数字大于或等于10时显示第一个数字字符。因此,如果您想显示数字,则需要将您的井号转换为零。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接