我有以下代码。
public class ToBeDeleted {
public static final float MAX_PHYSICAL_LENGTH = 100000000;
public static void main(String[] args) {
//100000000
float temp = 100000000 -4;
System.out.println(temp);
if (MAX_PHYSICAL_LENGTH == temp)
System.out.println("True statement");
else
System.out.println("False Statement");
}
}
以上的输出是
1.0E8
True statement
现在使用以下代码
public class ToBeDeleted {
public static final float MAX_PHYSICAL_LENGTH = 100000000;
public static void main(String[] args) {
//100000000
float temp = 100000000 -5;
System.out.println(temp);
if (MAX_PHYSICAL_LENGTH == temp)
System.out.println("True statement");
else
System.out.println("False Statement");
}
}
输出
9.9999992E7
False Statement
问题是
答案 0 :(得分:3)
典型(即IEEE754)float
仅具有23位精度。其他位用于指数和符号。您无法准确存储的最小整数是1加上2的24次幂。
100000000 - 4
与100000000 - 0
无法区分。
Java double
为您提供52位精度,因此有足够的空间来存储所有整数,精确到最高为53的幂。
有关详细信息,请参阅Which is the first integer that an IEEE 754 float is incapable of representing exactly?
但如果您需要精确小数精度,则使用小数类型。