为什么0.ToString("#.##")
会返回一个空字符串?不应该是0.00
或至少为0 吗?
答案 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")
第一部分适用于正值,第二部分适用于负值,第三部分适用于零。
答案 4 :(得分:-1)
像这样使用它:
0.ToString("#0.##")
0
之后的 #
将确保将输出值设置为0(如果值为0,否则将显示该值)。
所以0.0.ToString("#0.##")=0.00
和10.ToString("#.##")=10.00