我正在使用.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;
}
由于
答案 0 :(得分:3)
是的,它被称为“双舍入”问题。你可以通过将双精度转换为十进制,对其执行数学运算,然后转换回双精度来实现它。
一些相关链接:
此处:http://www.exploringbinary.com/double-rounding-errors-in-floating-point-conversions/