我对金额有以下要求:
1.2448 -> 1.25
3.349 -> 3.35
0.474 -> 0.47
我已经尝试了BigDecimal的所有可能模式。setScale (2, RoundingMode .) 方法,没有任何成功。结果如下:
UP: 1.25, 3.35, 0.48
HALF_UP: 1.24, 3.35, 0.47
CEILING: 1.25, 3.35, 0.48
FLOOR: 1.24, 3.34, 0.47
DOWN: 1.24, 3.34, 0.47
HALF_DOWN: 1.24, 3.35, 0.47
HALF_EVEN: 1.24, 3.35, 0.47
我也尝试过使用 BigDecimal.round(),结果也不好。
我怎样才能以所需的方式四舍五入?
编辑:
为什么我实际上需要以这种看似奇怪的方式进行舍入?
在我们正在开发的新软件中,我们需要重现舍入行为或遗留软件(这是企业希望进行舍入的方式)
解决方案:
我绝对希望在我的所有计算中都使用 BigDecimals。
所以,最后我想出了这个简单的函数来进行“渐进式”舍入:
public static BigDecimal roundAmount(BigDecimal amount) {
for (int i = amount.scale(); i >= 2; i--) {
amount = amount.setScale(i, RoundingMode.HALF_UP);
}
return amount;
}