在我们日常生活中无时无刻不在與金钱打交道比如你掏10块钱买一包9.60元的零食,售货员应该找你0.4元但是在Java开发中可不都是这样:
我们期望的结果是0.4 可为什么会出现这么匪夷所思的结果呢?
这是由于浮点数(Float)的存储规则导致的我们先来看十进制0.4如何转换成二进制(使用乘2取整,顺序排法)我们发现0.4不能用二进制准确表示,在二进制世界里这是个无限循环的小数可以理解成十进制中的1/3.那各位要说了取整不就完了
打印结果是0.4,看起来似乎解决了但隐藏一个很深的问题。在做金融行业系统时记录一般在小数点后四位,报表、展现时只显示两位如果使用浮点数计算货幣,经过几轮算术运算结果会有多大差距。因此有两种解决方案:
把参与运算的数值扩大100倍并转变为整型,展现时在缩小100倍这样处悝好处是简单、准确。非金融应用较多
经验内容仅供参考如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业囚士