Java 里 double(双精度浮点数)比 float(单精度浮点数)范围更大、精度也更高,根本原因不是 Java 语言本身,而是因为它们遵循的是 IEEE 754 浮点数标准,只是分配的二进制位数不同。
| 类型 | 位数(bit) | 符号位 | 指数位 | 尾数位(有效数字) |
|---|---|---|---|---|
float |
32 | 1 | 8 | 23 |
double |
64 | 1 | 11 | 52 |
✅
double在指数位和尾数位上都比 float 多,因此:
浮点数的值计算方式是:
value = ± 尾数 × 2^指数
指数位越多 → 指数能取的值越多 → 数能表示得越大或越小
≈ -126 ~ +127
~3.4 × 10^38
≈ -1022 ~ +1023
~1.8 × 10^308
✅ double 的指数范围远大于 float,所以范围更大
尾数位越多 → 有效数字越多
| 类型 | 有效数字(十进制) |
|---|---|
float |
约 7 位 |
double |
约 15~16 位 |
举例:
float f = 1.123456789f;
double d = 1.123456789;
System.out.println(f); // 1.1234568
System.out.println(d); // 1.123456789
double d = 1.2; // ✅ 默认
float f = 1.2f; // ❗必须加 f
原因:
double 精度更安全✅ 适合用 float 的情况:
❌ 不推荐:
double 比 float 范围更大,是因为 double 使用了 64 位,其中指数位和尾数位都比 float 多,能表示更大的指数范围和更高的精度。
如果你愿意,我也可以帮你画一张 float / double 内存结构对比图,或者解释 为什么浮点数会有精度误差。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。