【问题标题】:Why does 0.ToString("#.##") return an empty string instead of 0.00 or at least 0?为什么 0.ToString("#.##") 返回一个空字符串而不是 0.00 或至少 0?
【发布时间】:2012-02-18 13:43:03
【问题描述】:

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

【问题讨论】:

    标签: c# c#-4.0 tostring


    【解决方案1】:

    #在字符串格式中表示该值是可选的。如果您希望获得输出0.00,您需要以下内容:

    0.ToString("0.00");
    

    查看here for the custom numeric formats,可以传递给这个方法。

    【讨论】:

    • 有一件事仍然让我感到困惑,为什么结果不是 0。因为 0 不是可选的。空有意义吗?
    【解决方案2】:

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

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

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

    如果您想要所有三个数字:0.ToString("0.00"); 生成:0.00


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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          像这样使用它:

          0.ToString("#0.##")
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-10-14
            • 1970-01-01
            • 2018-06-29
            • 2015-06-21
            • 1970-01-01
            • 1970-01-01
            • 2020-03-30
            • 2013-01-19
            相关资源
            最近更新 更多