要对数字进行舍入,我使用以下代码:
public static roundBd(BigDecimal bd){
BigDecimal result1 = bd.setScale(0, RoundingMode.HALF_UP);
return result1;
}
第一个结果对我来说没问题,但第二个结果不是我的预期。 即使对于1.499我也希望输出2.(详细说明:首先我想将1.499转为1.50然后再转为1.5,最后转为2)
但是....
BigDecimal bd = new BigDecimal("1.499"); // I'd like to round it to 2
BigDecimal result1 = bd.setScale(2, RoundingMode.HALF_UP); // result1 == 1.50
BigDecimal result2 = bd.setScale(1, RoundingMode.HALF_UP); // result2 == 1.5
BigDecimal result3 = bd.setScale(0, RoundingMode.HALF_UP); // result3 == 1
答案 0 :(得分:3)
这不是四舍五入的方式。 HALF_UP表示如果一个数字正好位于2个最接近的可用值之间(取决于比例),则将向上舍入。其他任何内容都会四舍五入到最接近的值。
摘自the javadoc:
舍入模式向"最近邻居"除非两个邻居都是等距的
为了达到您所需的行为,您可以连续进行轮次,但我不确定为什么您想要这样的行为:
BigDecimal bd = new BigDecimal("1.499"); // I'd like to round it to 2
BigDecimal result1 = bd.setScale(2, RoundingMode.HALF_UP); // result1 == 1.50
BigDecimal result2 = result1.setScale(0, RoundingMode.HALF_UP); // result2 == 2
答案 1 :(得分:0)
这个结果正是 得到的结果;舍入每个中间牺牲精度,因此它直接舍入到正确的位数。
如果您真的想要其他行为,则必须执行类似
的操作while(number.scale() > 0) {
number.setScale(number.scale() - 1, RoundingMode.HALF_UP);
}