温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

BigDecimal任意精度整数怎么四舍五入

发布时间:2026-07-17 10:37:35 来源:亿速云 阅读:120 作者:小樊 栏目:编程语言

Java 的 BigDecimal 里,“任意精度整数四舍五入”通常有两种理解,我分别说明,并给出推荐做法


一、对 BigDecimal 本身进行四舍五入(最常见)

✅ 推荐方式:setScale + RoundingMode

import 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)

BigInteger 没有小数位,不能“四舍五入”。

常见场景 1:从 BigDecimal 转成 BigInteger

BigDecimal bd = new BigDecimal("123456789.6789");

BigInteger bi = bd.setScale(0, RoundingMode.HALF_UP).toBigInteger();

✅ 这是正确且安全的做法


三、容易踩坑的错误写法 ❌

❌ 错误 1:用 double 构造 BigDecimal

BigDecimal bd = new BigDecimal(10.345); // 精度丢失

✅ 正确写法:

BigDecimal bd = new BigDecimal("10.345");

❌ 错误 2:强制转 int / long

int x = bd.intValue(); // 可能溢出,且不四舍五入

✅ 正确:

BigDecimal bd = new BigDecimal("99999999999999999999.5");
BigInteger bi = bd.setScale(0, RoundingMode.HALF_UP).toBigInteger();

四、常用 RoundingMode 速查

模式 含义
HALF_UP 四舍五入(最常用)
HALF_DOWN 五舍六入
HALF_EVEN 银行家舍入
DOWN 直接截断
UP 只要有小数就进 1

五、总结一句话 ✅

BigDecimal 任意精度整数四舍五入,用 setScale(0, RoundingMode.HALF_UP) 再转 BigInteger

如果你有具体场景(比如金额、科学计算、除法结果),可以贴代码,我可以帮你精确优化。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI