Java浮点数和双打数相等

Mat*_*nes -1 java floating-point double

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

System.out.println(4.4f == 4.4); 
Run Code Online (Sandbox Code Playgroud)

这打印错误,

System.out.println(4.5f == 4.5);
Run Code Online (Sandbox Code Playgroud)

打印真实.

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

Lou*_*man 5

写入时4.4f,会产生最接近的值,表示为float真值4.4.

当您编写时4.4,会产生最接近的值,表示为double值4.4.

当你写的时候4.4f == 4.4,测试最近的值是否代表a float仍然是最接近的值,表示为double4.4,这是假的; double具有更高的精度,既不能floatdouble不能完全代表4.4.

二者floatdouble 可以然而代表4.5准确; 因为他们使用二进制分数,而4.5是精确的二进制分数,所以工作正常.


归档时间:

查看次数:

246 次

最近记录:

11 年,3 月 前