在 Java 的 BigDecimal 里,“任意精度整数四舍五入”通常有两种理解,我分别说明,并给出推荐做法。
BigDecimal 本身进行四舍五入(最常见)setScale + RoundingModeimport java.math.BigDecimal;
import java.math.RoundingMode;
BigDecimal bd = new BigDecimal("123456789.6789");
// 四舍五入到整数(保留 0 位小数)
BigDecimal result = bd.setScale(0, RoundingMode.HALF_UP);
System.out.println(result); // 123456790
setScale(0):表示 保留 0 位小数(即整数)RoundingMode.HALF_UP:标准四舍五入(≥5 进 1)BigDecimal 的正确用法BigInteger 没有小数位,不能“四舍五入”。
BigDecimal 转成 BigIntegerBigDecimal bd = new BigDecimal("123456789.6789");
BigInteger bi = bd.setScale(0, RoundingMode.HALF_UP).toBigInteger();
✅ 这是正确且安全的做法
double 构造 BigDecimalBigDecimal bd = new BigDecimal(10.345); // 精度丢失
✅ 正确写法:
BigDecimal bd = new BigDecimal("10.345");
int x = bd.intValue(); // 可能溢出,且不四舍五入
✅ 正确:
BigDecimal bd = new BigDecimal("99999999999999999999.5");
BigInteger bi = bd.setScale(0, RoundingMode.HALF_UP).toBigInteger();
| 模式 | 含义 |
|---|---|
HALF_UP |
四舍五入(最常用) |
HALF_DOWN |
五舍六入 |
HALF_EVEN |
银行家舍入 |
DOWN |
直接截断 |
UP |
只要有小数就进 1 |
BigDecimal 任意精度整数四舍五入,用
setScale(0, RoundingMode.HALF_UP)再转BigInteger。
如果你有具体场景(比如金额、科学计算、除法结果),可以贴代码,我可以帮你精确优化。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。