double类型的10.03为何乘100后会变成1002.9999999999999???
正在看《java语言程序设计基础篇》,在2.14 问题:整钱兑零中提到这个问题,double类型的10.03为何乘100后会变成1002.9999999999999,但书中没有介绍问题的原因。请问各位高人如何解决这个问题,是怎么回事?
------解决方案--------------------浮点数在计算机中存储是近似存储的,所以计算下来就有误差了。楼主看看double数据在计算机中的存储吧。
------解决方案--------------------BigDecimal
------解决方案--------------------浮点计算存在误差的,因此结果不能直接==号比较,要考虑精度的去比较。
比如误差在0.0001内,那么结果result与预期值wantValue比较,
------解决方案--------------------result-wantValue
------解决方案--------------------<=0.0001,则算结果正确。