为什么 0.ToString("#.##")返回一个空字符串? 它不应该是 0.00或者 至少0吗?
0.ToString("#.##")
0.00
字符串格式的 #表示该值是可选的。如果您希望获得输出 0.00,您需要以下内容:
#
0.ToString("0.00");
请参见可以传递给此方法的 自定义数字格式。
因为在格式字符串中,#用于表示可选的字符占位符; 只有在 需要表示数字时才使用 #。
If you do this instead: 0.ToString("0.##"); you get: 0
0.ToString("0.##");
0
有趣的是,如果你这样做: 0.ToString("#.0#");你得到: .0
0.ToString("#.0#");
.0
如果你想要所有三个数字: 0.ToString("0.00");产生: 0.00
From the comments to this answer, your argument seems to be,
它应该显示’0’,因为为什么会有人想要看到一个空字符串,如果数值是0?
The response is simple: 你可以选择 how you wish it to be displayed. That's what the custom format strings are for. 您只是根据需要选择了不正确的格式字符串.
根据有关 Digit Placeholder的文档。
如果格式化的值在格式字符串中出现“ #”的位置有一个数字,则该数字将复制到结果字符串。否则,什么都不是 存储在结果字符串的该位置。如果‘0’字符不是有效数字,即使‘0’是字符串中唯一的数字,此说明符也不会显示该字符。会的 如果“0”字符是所显示数字中的有效数字,则显示该字符。格式字符串“ # #”使值四舍五入到前面最接近的数字 小数,其中总是使用从零四舍五入。例如,用“ # #”格式化34.5将得到值35。
如果希望显示零,请使用 零位置固定器
如果格式化的值在格式字符串中出现“0”的位置有一个数字,则将该数字复制到结果字符串。的位置 小数点前最左边的“0”和小数点后最右边的“0”确定结果字符串中始终存在的位数范围。 “00”说明符使该值四舍五入到小数点前最接近的数字,其中总是使用从零四舍五入。例如,格式化 带“00”的34.5将得到值35。
试试这个 0.ToString("#,##; #,##;0")
0.ToString("#,##; #,##;0")
Https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings#sectionseparator
The first section applies to positive values, the second section applies to negative values, and the third section applies to zeros.
Use it like this:
0.ToString("#0.##")
#之后的 0将确保设置输出值为0,如果值为0,否则它将显示该值。 所以 0.0.ToString("#0.##")=0.00和 10.ToString("#.##")=10.00
0.0.ToString("#0.##")=0.00
10.ToString("#.##")=10.00