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