Java 中 double 和 float 原生类型的比较\n
如果用 .5 或 .0 或 .1235(以 5 或 0 结尾)比较 float 值和 double 值,则 == 运算符返回 true,否则将返回 false。请参见以下示例。
示例
public class Tester { public static void main(String[] args) { double d1 = 2.5; float f1 = 2.5f; System.out.println(d1 == f1); double d2 = 2.4; float f2 = 2.4f; System.out.println(d2 == f2); } }
输出
true false
此逻辑背后的原因是 float 和小数的近似值。Float 数据类型是单精度 32 位 IEEE 754 浮点,而 double 数据类型是双精度 64 位 IEEE 754 浮点。以 5 或 0 结尾的数字可以在 double 和 float 中精确表示。
对于其他数字,它类似于将 0.3333 与 0.33333333 进行比较,其中后者的精度较高。
Learn Java in-depth with real-world projects through our Java certification course. Enroll and become a certified expert to boost your career.
比较 double 和 float 的正确方法
为了比较 double 和 float,请检查两者之间的差异是否大于或小于特定边距。请参见以下示例。
示例
public class Tester { public static void main(String[] args) { double d1 = 2.5; float f1 = 2.5f; System.out.println(d1 == f1); double d2 = 2.4; float f2 = 2.4f; double margin = 0.0000001; System.out.println(compareNumbers(d2, f2, margin)); } private static boolean compareNumbers(double d, float f, double margin) { if(Math.abs(d - f) < margin) { return true; } return false; } }
输出
true true
广告