Java double和float原始类型的比较
考虑一下Java中的以下两段代码。
// This program prints true
class Geeksforgeeks {
public static void main(String args[]) {
float f = 5.25f;
double d = 5.25
System.out.println(f == d);
}
}
输出
true
// But this program prints false.
class Geeksforgeeks {
public static void main(String args[]) {
float f = 5.1f;
double d = 5.1;
System.out.println(f == d);
}
}
输出
false
第一个例子的输出是真,第二个是假。我们知道float和double的精度是不同的。浮点数的尾数是24,double是53。
让我们考虑第一个例子:5.25。积分部分的二进制表示是101,点的部分的二进制表示是0.01(只需要两个比特)。
让我们考虑第二个例子5.1。积分部分的二进制表示法是相同的。但是0.1的二进制表示是1/16+1/32+1/64+1/128…..,以此类推,直到我们到达尾数的终点或总和超过0.1。在这种情况下,我们到达尾数的末端,因此5.1的值在浮点数和double中变得不同。