Java浮点数和双打数相等

时间:2014-10-29 18:44:41

标签: java floating-point double

我正在调试我的一个程序,其中某些双打和浮动不相等。我在此之前已经找到了答案,为什么会发生这种情况,但找不到相关信息。例如:

System.out.println(4.4f == 4.4); 

这会打印为false,

System.out.println(4.5f == 4.5);

打印真实。

有人可以解释为什么JAVA会出现这种情况吗?

1 个答案:

答案 0 :(得分:5)

当您编写4.4f时,会产生最接近的值,表示为float到真值4.4。

当您撰写4.4时,会产生最接近的值,表示为值{4.4}的double

当您编写4.4f == 4.4时,会测试最接近的值float是否仍然是可以表示为double到4.4的最接近的值,这是假的; double具有更高的精确度,floatdouble都不能完全代表4.4。

floatdouble 都可以完全代表4.5;因为他们使用二进制分数,而4.5是精确的二进制分数,所以工作正常。