我有两个以Double格式存储的数字,分别为1.4300和1.4350。当我做减法操作1.4350 - 1.4300时,它返回结果:0.0050000000000001155。为什么会在末尾加上1155,并且该如何解决这个问题才能返回0.005或0.0050? 我不确定四舍五入是否可行,因为我正在使用2位和4位小数。
哦,我喜欢这些......这是由于双精度表示的不准确性引起的,浮点运算充满了这些问题。通常是由二进制中的循环数字(即基于2的浮点表示)引起的。例如,在十进制中,1/3 = 0.3333',在二进制中,1/10是一个循环数字,这意味着它不能被完美地表示。试试这个:1-0.1-0.1-0.1-0.1,你得不到0.6 :-)
为了解决这个问题,可以使用BigDecimal(首选)或通过先将其乘以像10000这样的数字,然后四舍五入,再除以原来的数来操作double(不太干净)。
好问题......过去曾经造成了巨大的问题。导弹超出目标、卫星发射后坠毁等等。在网上搜索一下,你会惊讶的!
对于非常精度的浮点数计算,Double类型不是正确的选择,如果您想要精确的结果,则必须使用BigDecimal。