首页 > 解决方案 > 如何用零刻度舍入 BigDecimal

问题描述

我有一个 BigDecimal

262727.00 / 48 = 5473.479166666666667

BigDecimal value = new BigDecimal("5473.479166666666667");
value = value.setScale(0, RoundingMode.HALF_EVEN);
System.out.println(value.toString());

我希望得到 5474,但我得到了 5473。有人知道如何获得 5474 的数字吗?

谢谢

标签: java

解决方案


RoundingMode.HALF_EVEN向“最近的邻居”四舍五入。.4791更接近0,因此向下舍入。

根据您需要调用setScale()两次的注释,一次获取最接近的小数,然后是最接近的数字

value = value.setScale(1, RoundingMode.HALF_EVEN).setScale(0, RoundingMode.HALF_EVEN);

推荐阅读