This question already has answers here:
Is floating point math broken?

(31个答案)


4年前关闭。




我有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(首选),或者通过先将其乘以10000(然后将其四舍五入然后再除之(不太干净))来操纵double。

很好的问题……过去曾引起很多问题。导弹超过目标,发射后卫星坠毁,等等。在网上搜索一些,您会感到惊讶!

10-06 13:16