我有一个BigDecimal,其值为450.90,我想要向上舍入到下一个孔整数值,然后打印没有任何小数点的Integer值,就像这样;
Val:450.90 - >圆形:451.00 - >输出:451
Val:100.00001 - >圆形:101.00000输出:101
检查了一些解决方案,但我没有得到预期的结果,继承我的代码;
BigDecimal value = new BigDecimal(450.90);
value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP
return value.intValue();
谢谢!
答案 0 :(得分:33)
setScale
返回一个新结果BigDecimal
,它不会更改您调用它的实例。因此,将返回值分配回value
:
value = value.setScale(0, RoundingMode.UP);
我还将其更改为RoundingMode.UP
,因为您说总是想要整理。但根据您的需求,您可能需要RoundingMode.CEILING
;这取决于您希望-451.2
成为什么(-452
[UP
]或-451
[CEILING
])。有关详情,请参阅RoundingMode
。
答案 1 :(得分:4)
使用:
value.setScale(0, RoundingMode.CEILING);
答案 2 :(得分:2)
从方法说明:
请注意,由于BigDecimal对象是不可变的,因此调用setScale 相反,方法不会导致原始对象被修改 通常使用名为setX mutate field X的方法。 相反,setScale返回具有适当比例的对象;该 返回的对象可能会或可能不会被新分配。
public void test() {
BigDecimal value = new BigDecimal(450.90);
System.out.println(value.setScale(0, RoundingMode.HALF_UP)); // prints 451
}
答案 3 :(得分:1)
您需要使用返回的值
BigDecimal value = new BigDecimal(450.90);
value = value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP
请注意BigDecimal是不变的
缩放/舍入操作(setScale和round)返回BigDecimal 其值大约(或精确)等于 操作数,但其标度或精度是指定值;那是, 它们会增加或减少存储数字的精度 对其价值的影响微乎其微。
答案 4 :(得分:0)
使用Math.ceil()
功能。方法ceil给出的最小整数大于或等于参数。
您可以阅读here