【问题标题】:Custom numeric format string to always display the sign自定义数字格式字符串以始终显示符号
【发布时间】:2008-12-07 22:17:56
【问题描述】:

有什么方法可以指定标准或自定义数字格式字符串来始终输出符号,无论是 +ve 还是 -ve(虽然它应该为零,但我不确定!)

【问题讨论】:

    标签: c# .net formatting string-formatting


    【解决方案1】:

    是的,你可以。 有条件格式。见Conditional formatting in MSDN

    例如:

    string MyString = number.ToString("+0;-#");
    

    每个部分用分号分隔代表正数和负数

    或:

    string MyString = number.ToString("+#;-#;0");
    

    如果您不希望零带有加号。

    【讨论】:

    • 修复了一个错误,即底片没有得到减号。
    • +#;-#,对于值0,我得到的只是“+”,没有实际的0。对我来说,我希望0显示为“+0”,所以这有效:+#;-#;+0
    • 谢谢!将其与'' 混合使用会很棒!看看这个:Changes.ToString("'('#' ▲)';'('#' ▼)';''")!它为我节省了大量时间和数百条if 声明! :)
    • @orionelenzil 我遇到了同样的问题。您也可以使用+0;-# 而不是+#;-#;+0 这个答案对我来说真的很误导。
    • @Shahab 我喜欢。请注意,如果您不想...string msg = $"The stock market is {delta:▲;▼;~} today.";
    【解决方案2】:

    请注意,使用条件格式时,负值不会自动获得符号。你需要做的

    string MyString = number.ToString("+#;-#;0");
    

    【讨论】:

    • 正如其他人指出的那样,+0;-# 以更简洁的代码为您提供相同的结果。
    【解决方案3】:

    你也可以在 string.Format(); 中使用格式字符串;格式字符串用冒号 (':') 与索引分隔

    var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);
    

    对于数字 { +1, -1, 0 },这给出:

    1,强制符号 +1,零符号 +1
    -1,强制符号 -1,零符号 -1
    0, 强制符号 +0, 零无符号 0

    您也可以使用内插字符串代替string.Format 来获得相同的结果:

    var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";
    

    【讨论】:

    • 答案的最后一行应该是“默认格式 0,强制符号 +,零符号 0”。因为这是 +#;-# 格式为值 0 的实际结果
    • 谢谢你,卡米尔 - 我错过了。我现在更正了强制符号格式:+#;-#;+0(而不是 +#;-#)
    • 您可以使用更简单的格式获取强制标志行为:+0;-#。 :)
    • @Andrew,的确如此,但我更喜欢 +#;-#;+0 而不是 +#;-#,因为这样更清楚 0 将被格式化为 +0
    【解决方案4】:

    与其他答案相反,如果您想获得 +1、-1、+0(对于参数 1、-1、0),您需要使用以下格式:

    String.Format("{0:+#;-#;+0}", 0));  // output: +0
    

    String.Format("{0:+0;-#}", 0));  // output: +0
    

    如果您只使用+#;-#,它将仅显示+(而不是+0)为0。

    “#”自定义说明符https://msdn.microsoft.com/en-us/library/0c899ak8.aspx

    请注意,此说明符从不显示不是有效数字的零,即使零是字符串中的唯一数字。只有当它是正在显示的数字中的有效数字时,它才会显示零。

    另外请记住,如果您需要任何小数精度,则需要这样指定:

    String.Format("{0:+0.##;-#.##}", 0));  // output: +0
    

    或者,如果你不想总是出现零,像这样:

    String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00
    

    【讨论】:

      【解决方案5】:

      对于任何类型的数值表达式:

      +###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
      

      三种情况使用三个部分:正;负;零

      示例的其他方面:

      • 零未签名。您可以将其显示为任何内容,例如“零”。

      • 小于 1 的绝对值在小数点前以 0 开头。根据口味调整。

      • 位数是最大和最小的绝对十进制值。根据口味调整。

      • 小数点字符是特定于区域性的。 .NET 替代品。

      • 分组分隔符是可选的。这个角色是特定于文化的。 .NET 替代品。 (位置也是特定于文化的,但这仅由您的格式字符串控制。)您还可以使用除 Format 的特殊字符(包括 , . # 0)之外的任何其他字符。

      【讨论】:

        【解决方案6】:

        我无法发表评论,所以我在这里做一个答案(坚果声誉系统....)

        您可以很好地使用 number.ToString("+0;-#") 来生成 UTC 字符串 TimeFormat

        这里显示在 PowerShell 代码中

        "$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"
        

        谢谢@gcores https://stackoverflow.com/users/40256/gcores

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-20
          • 1970-01-01
          • 2017-10-08
          • 1970-01-01
          • 2012-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多