double精度更高且为默认类型,float需加f后缀;因二进制存储导致精度误差,比较时应使用阈值判断而非==。

在Java中,float 和 double 都是用来表示浮点数的数据类型,但它们在精度、内存占用和使用场景上有明显区别。理解这些差异对编写准确、高效的代码非常重要。
1. 存储空间与精度不同
float 是单精度浮点数,占用 4 字节(32位)内存,提供大约 6-7 位有效数字的精度。
double 是双精度浮点数,占用 8 字节(64位)内存,提供大约 15-16 位有效数字的精度。
因此,在需要更高精度的计算时,应优先选择 double。
立即学习“Java免费学习笔记(深入)”;
2. 默认浮点类型是double
Java 中任何小数默认都被视为 double 类型。例如:
double d = 3.14; // 正确,3.14 是 double 类型float f = 3.14; // 编译错误!不能将 double 赋值给 float
float f = 3.14f; // 正确,加上 'f' 表示这是 float 类型
要声明一个 float 类型的字面量,必须在数值后加上 f 或 F,否则会被当作 double 处理。
3. 精度误差与比较问题
由于浮点数采用二进制表示,很多十进制小数无法精确存储,导致精度丢失。例如:
double b = 0.1;
虽然看起来一样,但由于存储方式不同,它们的实际值都只是近似值。
因此,不要直接使用 == 比较两个浮点数是否相等。正确的做法是判断它们的差值是否在一个很小的范围内:
double x = 0.1 + 0.2;double y = 0.3;
if (Math.abs(x - y)
System.out.println("相等");
}
4. 使用建议与注意事项
在大多数情况下,推荐使用 double,因为它的精度更高,且是 Java 的默认浮点类型,避免了不必要的类型转换。
只有在内存敏感的场景(如大规模数组处理)且精度要求不高时,才考虑使用 float 来节省空间。
涉及金额计算时,不要使用 float 或 double,应使用 BigDecimal 类,以避免舍入误差带来的财务风险。
基本上就这些:理解 float 和 double 的区别,注意字面量写法,避免精度误判,合理选择类型。不复杂但容易忽略细节。










