产生奇数结果的双重计算

我有2个数字存储为Double,1.4300和1.4350。 当我减去1.4350 – 1.4300时,它给出了结果:0.0050000000000001155。 为什么它会在最后添加1155,如何解决这个问题,使其返回0.005或0.0050? 我不确定舍入是否有效,因为我使用的是2和4的十进制数。

哦,我喜欢这些…这些都是由双重表示中的不准确引起的,浮点运算充满了这些。 它通常由二进制中的重复数字(即base-2浮点表示)引起。 例如,在十进制1/3 = 0.3333’中,二进制1/10是一个重复数字,这意味着它无法完美表示。 试试这个:1 – 0.1 – 0.1 – 0.1 – 0.1。 你不会得到0.6 🙂

要解决这个问题,请使用BigDecimal(首选)或操作double,先将其乘以10000,然后将其四舍五入再重新划分(不太干净)。

好问题……它在过去造成了巨大的问题。 导弹过冲目标,卫星在发射后坠毁等。在网上搜索一些,你会惊讶的!

这是一些常见的陷阱与一些计算机表示的分数,请参阅此问题或google的浮点精度 。

对于非常精确的浮点计算,Double不是正确的类型,如果您需要精确的结果,则必须使用BigDecimal。