.NET Web API返回带有大量小数位的double

时间:2014-04-02 10:48:08

标签: c# .net json double rounding

我正在使用.Net Web API来返回已加倍的信息。在我回来之前,我把那些双打到两位小数。当我打印它们时,我得到(f.e):145,92。太棒了但是当我返回那个double时,我的JSON响应是用这样的双重创建的:

  

“小时”:145.92000000000002

任何想法是什么造成了这个问题?

我的舍入功能是:

public double ApplyRounding(double value, int digits)
    {
        decimal decValue = (decimal)value;
        // First round is to fix rounding errors by changing things like 0.99499999999999 to 0.995
        decValue = Math.Round(decValue, digits + 5, MidpointRounding.AwayFromZero);
        decValue = Math.Round(decValue, digits, MidpointRounding.AwayFromZero);
        return (double)decValue;
    }

由于

1 个答案:

答案 0 :(得分:3)

是的,它被称为“双舍入”问题。你可以通过将双精度转换为十进制,对其执行数学运算,然后转换回双精度来实现它。

一些相关链接:

此处:http://www.exploringbinary.com/double-rounding-errors-in-floating-point-conversions/

此处:Decimal rounding errors upon division (C#)

此处:http://csharpindepth.com/Articles/General/Decimal.aspx