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,双精度数为 53。
让我们考虑 5.25 的第一个例子。整数部分的二进制表示为 101,点的部分二进制表示为 0.01(只需要两位)
让我们考虑第二个例子 5.1。整数部分的二进制表示是相同的。但是 0.1 的二进制表示是 1/16 + 1/32 + 1/64 + 1/128 ..... 以此类推,直到我们到达尾数末尾或总和大于 0.1。在这种情况下,我们到达尾数的末尾,因此 5.1 的值在 float 和 double 中变得不同。