为什么0.ToString(“#。##”)返回一个空字符串而不是0.00或至少为0?

时间:2012-01-25 11:02:19

标签: c# c#-4.0

为什么0.ToString("#.##")会返回一个空字符串?不应该是0.00至少为0 吗?

5 个答案:

答案 0 :(得分:179)

字符串格式的

#表示该值是可选的。如果您希望获得输出0.00,则需要以下内容:

0.ToString("0.00");

请参阅可以传递给此方法的here for the custom numeric formats

答案 1 :(得分:129)

因为在格式字符串中,#用于表示可选的字符占位符;它仅在需要表示数字时使用。

如果您这样做:0.ToString("0.##");,您会得到:0

有趣的是,如果你这样做:0.ToString("#.0#");你会得到:.0

如果您想要全部三位数:0.ToString("0.00");产生:0.00


从评论到这个答案,你的论点似乎是,

  

它应该显示'0',因为如果数值为0,为什么有人想要看到一个空字符串?

响应很简单:您可以选择如何显示它。这就是自定义格式字符串的用途。 您只是根据需要选择了错误的格式字符串

答案 2 :(得分:20)

根据有关数字占位符的文档。

  

如果格式化的值在格式字符串中出现“#”的位置有一个数字,则该数字将复制到结果字符串中。否则,什么都没有   存储在结果字符串中的该位置。如果它不是有效数字,则该说明符永远不会显示'0'字符,即使'0'是字符串中的唯一数字。它会   如果它是显示的数字中的有效数字,则显示“0”字符。 “##”格式字符串使该值四舍五入到最接近的数字   小数,总是使用从零开始的舍入。例如,使用“##”格式化34.5将导致值为35。

如果要显示零,请使用 Zero PlaceHolder

  

f格式化的值在格式字符串中出现“0”的位置有一个数字,然后该数字被复制到结果字符串。的位置   小数点前最左边的'0'和小数点后最右边的'0'确定结果字符串中始终存在的数字范围。
  “00”说明符使值四舍五入到小数点前面的最近数字,其中始终使用从零开始的舍入。例如,格式化   带有“00”的34.5将导致值35。

答案 3 :(得分:2)

试试这个0.ToString("#,##; #,##;0")

https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings#SectionSeparator

第一部分适用于正值,第二部分适用于负值,第三部分适用于零。

答案 4 :(得分:-1)

像这样使用它:

0.ToString("#0.##")
0之后的

#将确保将输出值设置为0(如果值为0,否则将显示该值)。 所以0.0.ToString("#0.##")=0.0010.ToString("#.##")=10.00