【问题标题】:Round double in two decimal places in C#?在 C# 中以两位小数舍入双精度数?
【发布时间】:2011-01-22 09:44:28
【问题描述】:

我想在 c# 中将 double 值四舍五入到小数点后两位,我该怎么做?

double inputValue = 48.485;

总结后

inputValue = 48.49;

相关:c# - How do I round a decimal value to 2 decimal places (for output on a page)

【问题讨论】:

标签: c# double rounding


【解决方案1】:

这行得通:

inputValue = Math.Round(inputValue, 2);

【讨论】:

  • 截断浮点数的解决方法:float myTruncFloat = float.Parse(Math.Round(myFloat, 2).ToString());
  • 如果值为 48.0000。它不会产生 48.00。双输入值 = 48.00; inputValue = Math.Round(inputValue, 2);只会产生 48 个结果。有什么warkaound吗?
  • 根据文档,这会将中点数字四舍五入到最接近的偶数 docs.microsoft.com/en-us/dotnet/api/…
  • @user1926138 48.00 不是有效数字。
【解决方案2】:
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

【讨论】:

  • 这其实是应该用的。银行等中的大多数操作都是使用这种方法(MidpointRounding.AwayFromZero)完成的。
  • 建议银行使用双打是可怕的家伙,不要使用货币的近似值。
  • @raggi 恐怕有些(银行)会这样做......这可以解释很多事情
  • 是的,我相信这就是电影“办公空间”之后制作的 - 将没有人注意到的几分钱四舍五入。在何时随意使用舍入时要小心。
  • 作为很久以前的一部原创超人电影的情节的一部分。
【解决方案3】:

另一种简单的方法是使用带参数的 ToString。 示例:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

结果:

54.97

【讨论】:

    【解决方案4】:

    你应该使用

    inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)
    

    Math.Round

    Math.Round 将双精度浮点值舍入为 指定的小数位数。

    MidpointRounding

    指定数学舍入方法应如何处理数字 介于两个数字之间。

    基本上,上面的函数会将您的输入值四舍五入到 2(或您指定的任何数字)小数位。使用MidpointRounding.AwayFromZero,当一个数字介于其他两个数字之间时,它会向离零最近的数字四舍五入。您还可以使用另一个选项,向最近的偶数四舍五入号码。

    【讨论】:

    • 这应该是答案!
    【解决方案5】:

    使用Math.Round

    value = Math.Round(48.485, 2);
    

    【讨论】:

    • 打败我(尽管我也会在上面添加一个分号;))
    • 但是,注意MidpointRounding:“如果value中小数点右边第一个数字的值为5,则digits位置的数字如果是奇数则向上取整,如果是偶数则保持不变"
    【解决方案6】:

    你可以从下面尝试一个。有很多方法。

    1. 
     value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
    2.
     inputvalue=Math.Round(123.4567, 2)  //"123.46"
    3. 
     String.Format("{0:0.00}", 123.4567);      // "123.46"
    4. 
    string.Format("{0:F2}", 123.456789);     //123.46
    string.Format("{0:F3}", 123.456789);     //123.457
    string.Format("{0:F4}", 123.456789);     //123.4568
    

    【讨论】:

    • 我使用了第四个选项。写 F6 比写下 6 个零对我更有效;-)
    【解决方案7】:

    使用内插字符串,这会生成一个向上取整的字符串:

    var strlen = 6;
    $"{48.485:F2}"
    

    输出

    "48.49"
    

    【讨论】:

      【解决方案8】:

      我认为所有这些答案都缺少问题。问题在于“向上取整”,而不仅仅是“取整”。我的理解是,四舍五入意味着任何关于整数的小数值都会四舍五入到下一个整数。即:48.0000000 = 48 但 25.00001 = 26。这不是四舍五入的定义吗? (或者我过去 60 年的会计工作是否放错了位置?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        相关资源
        最近更新 更多