简短结论:会“出错”或“看起来不准”,但这是浮点数本身的特性,不是 Java 的 bug。
Java 的 double 遵循 IEEE 754 双精度浮点数标准:
0.1、0.2System.out.println(0.1 + 0.2);
输出:
0.30000000000000004
原因:
0.1 在二进制中是无限循环小数double 只能存近似值double a = 1.0;
double b = 0.1;
System.out.println(a - 0.9); // 可能不是 0.1
double x = 0.1 + 0.2;
System.out.println(x == 0.3); // false
✅ 正确方式(允许误差):
Math.abs(x - 0.3) < 1e-9
double d = 1_000_000; // 准确
±2^53 以内的整数可以精确表示BigDecimalBigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
System.out.println(a.add(b)); // 0.3
⚠️ 不要用:
new BigDecimal(0.1) // 仍然是近似值
if (Math.abs(a - b) < 1e-9) {
// 认为相等
}
System.out.printf("%.2f", 0.1 + 0.2);
Double 不会“算错”,但会“不精确”
普通计算没问题,钱、精度要求高的别用 double
如果你愿意,可以告诉我:
我可以给你更针对性的建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。