将BigDecimal向上舍入为整数值

时间:2014-09-29 14:33:06

标签: java math rounding bigdecimal

我有一个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();

谢谢!

5 个答案:

答案 0 :(得分:33)

setScale 返回一个新结果BigDecimal,它不会更改您调用它的实例。因此,将返回值分配回value

value = value.setScale(0, RoundingMode.UP);

Live Example

我还将其更改为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