【问题标题】:prevent rounding of decimals when using currency string format使用货币字符串格式时防止小数四舍五入
【发布时间】:2011-05-18 09:05:46
【问题描述】:

我有一些来自外部服务的十进制数据。我需要将数据格式化为 2 位小数,因为它代表金钱,但如果我使用标准 C 格式,我会将数字四舍五入:

var x = 42.999m;

var y = string.Format("{0:C}", x);

这导致 y 包含 £43.00。我怎样才能把它四舍五入到 42.99 英镑?

(注意this question不一样)

【问题讨论】:

    标签: .net string-formatting


    【解决方案1】:

    如果您想使用非默认舍入策略,您需要执行以下操作:

    var x = 42.999m;
    
    var y = string.Format("{0:C}", Math.Floor(x * 100) / 100);
    

    Math.Floor 向下舍入;但是它不需要小数位数,因此您必须强制使用小数点后 2 位的行为。

    【讨论】:

      【解决方案2】:

      虽然这个问题已经解决了,但我建议你使用

      var y = String.Format("{0:c3}",x);
      // "{0:C3}" is for -123.456 ("C3", en-US) -> ($123.456)
      

      From here

      【讨论】:

        猜你喜欢
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        相关资源
        最近更新 更多