我正在调试我的一个程序,其中某些双打和浮动不相等。我在此之前已经找到了答案,为什么会发生这种情况,但找不到相关信息。例如:
System.out.println(4.4f == 4.4);
这会打印为false,
System.out.println(4.5f == 4.5);
打印真实。
有人可以解释为什么JAVA会出现这种情况吗?
答案 0 :(得分:5)
当您编写4.4f
时,会产生最接近的值,表示为float
到真值4.4。
当您撰写4.4
时,会产生最接近的值,表示为值{4.4}的double
。
当您编写4.4f == 4.4
时,会测试最接近的值float
是否仍然是可以表示为double
到4.4的最接近的值,这是假的; double
具有更高的精确度,float
和double
都不能完全代表4.4。
float
和double
都可以完全代表4.5;因为他们使用二进制分数,而4.5是精确的二进制分数,所以工作正常。