2
对于这些代码行,我返回0作为输出,它们都是相等的。现在,如果我理解正确,ab和c可能会存储稍微不同的真实值.3版本。因此,当针对这些值执行Float.compare(...)时,我希望返回0以外的值作为输出。为什么我将它们作为0?浮点运算和浮点值比较
float a = 0.15f + 0.15f;
float b = 0.1f + 0.2f;
float c = 0.3f;
System.out.println(Float.compare(a, b)); //<--- outputs 0
System.out.println(Float.compare(a, c)); //<--- outputs 0
System.out.println(Float.compare(b, c)); //<--- outputs 0
只是因为浮点不是一般的不够准确,并不意味着它是不是在特定情况下不够准确。 –
你可以加上你的问题,对于double值,它不会以这种方式工作(因为'0.1d + 0.2d'的结果是'0.30000000000000004',所以'-1','0','1'其他数字是'0.3')。 – Pshemo
@Pshemo:“0.1d”和“0.1f”一样不准确,只是更多的小数位。浮点精度不能表示0.1,它是以2为底的重复序列。 –