日期:2014-05-17  浏览次数:21041 次

只有3行代码!错误在哪里?高手快来看看!好奇怪!喵了个咪的!
大家看一下下面的代码哈!只有三行,为什么结果不是我想要的!?

double l=Math.Floor(((float)1542/(float)8529)* 1000) / 1000;//保留三位小数,不四舍五入!
Console.WriteLine(l);
Console.WriteLine(l-0.17);

输出结果:


输出l是0.18,为什么0.18-0.17不等于0.01,而是0.00999......8?

错误在哪里?
该怎么改呢?

------解决方案--------------------
引用:
Quote: 引用:

精度问题,不要纠结了。
我猜也是精度问题,为什么结果不一样呢?

你可以看一下double类型数在内存中的存储方式就明白了。
double类型都是小数(1.xxxx) 乘以 2的n次方的形式表示的。所以只有像0.5,0.25等2的n次方的整数倍的数才有可能无损保存,想0.1这样的数也是有误差的
------解决方案--------------------
原因要去学习浮点数的记录方法。