【发布时间】:2013-12-19 13:33:36
【问题描述】:
以下代码分别使用float和double类型的值。
float a=99999.99F;
double b=a;
System.out.println("a : "+a);
System.out.println("b : "+b);
System.out.println("a==b : "+(a==b));
它显示以下输出:
a : 99999.99
b : 99999.9921875
a==b : true
执行后a和b的值分别是99999.99和99999.9921875虽然a==b返回true。
比较表达式a==b如何返回true?
【问题讨论】:
-
浮点数不安全,不能直接比较它们在任何语言中都必须与范围进行比较 > &
-
这个答案也值得一看:[link] (stackoverflow.com/a/3730249/248847)
-
@amar:这不是这里的问题,也不是普遍适用的建议。这是一个神话,源于对浮点运算的工作原理缺乏了解。
-
@PhilippSander:这个问题不是那个问题的重复,因为在这个问题中,被比较的数字完全相等,
==运算符返回正确的结果。
标签: java floating-point double