
Java中处理浮点数运算时,由于float和double类型基于IEEE 754标准,存在精度丢失问题。直接使用它们进行计算,比如加减乘除,可能会导致不符合预期的结果。例如
0.1 + 0.2
0.3
对于需要精确结果的场景,如金融计算、金额处理等,应使用java.math.BigDecimal类。
注意:不要用double构造函数创建BigDecimal,这会继承double的精度问题。
错误写法:new BigDecimal(0.1)
0.1000000000000000055511151231257827021181583404541015625
立即学习“Java免费学习笔记(深入)”;
正确做法是使用字符串构造函数:
new BigDecimal("0.1")add()
subtract()
multiply()
divide()
示例:
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal sum = a.add(b); // 结果为 0.3
由于浮点数存储的近似性,不能用
==
应该使用“误差范围”(delta)进行比较:
1e-9
示例:
double d1 = 0.1 + 0.2; double d2 = 0.3; boolean isEqual = Math.abs(d1 - d2) < 1e-9; // true
根据使用场景决定浮点类型:
如果金额可以用整数表示(如以分为单位),优先使用long或int,从根本上避免浮点问题。
处理浮点数时记住:
基本上就这些,不复杂但容易忽略。
以上就是如何在Java中正确处理浮点数运算的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号