我遇到了以下程序
class Boolean {
public static void main(String argv[]) {
boolean x;
x = 4.4f == 4.4;
System.out.println(x);
}
}
以下程序的输出为false
但是,如果我们以下列方式编写程序,那么
class Boolean {
public static void main(String argv[]) {
boolean x;
x = 4.5f == 4.5;
System.out.println(x);
}
}
在这种情况下,输出为true
有人可以解释一下为什么吗?
解决方法:
通常不应将浮点值与==运算符进行比较.你应该使用’足够接近’的比较,比如检查值是否有一些小的值:
double epsilon = 0.000001
boolean equal = Math.abs(value1-value2)
在你的例子中,4.4f不等于4.4,因为java将浮点值默认为double类型,即64bit,并将它们的java转换4.4f与double进行比较,这使得它与原始的double值4.4略有不同(因为用二进制代表小数部分的问题).
这是浮点数上的一个很好的link.
标签:java,boolean
来源: https://codeday.me/bug/20190521/1147978.html