正确缩放BigDecimal

时间:2014-04-10 20:54:22

标签: java precision bigdecimal

我的情况是我想缩放值,但在某些情况下,我得到的异常表明需要进行舍入。

假设我有数字-9.9999999.999999

让我们说我只关心小数点后最多4点的精度。如何在不检查值是正还是负的情况下正确缩放这两个数字?

例如,如果我使用RoundingMode.FLOOR,我会得到:

9.999999 scales to 99999
-9.999999 scales to -100000

我想要的是9.9999-9.9999

我真的需要检查这里的标志吗?我觉得我错过了什么。

2 个答案:

答案 0 :(得分:3)

RoundingMode.DOWN总是向零舍入,所以这应该是你正在寻找的。也就是说,它在轮次结束时永远不会增加你的最终数字。它相当于以指定的比例截断您的值。

答案 1 :(得分:0)

BigDecimal bg1, bg2;

bg1 = new BigDecimal("123.12678");

// set scale of bg1 to 2 in bg2 using floor as rounding mode
    bg2 = bg1.setScale(2, RoundingMode.FLOOR);

String str = bg1 + " after changing the scale to 2 and rounding is
                 " +bg2;

// print bg2 value
    System.out.println( str );

给你输出:123.12678 after changing the scale to 2 and rounding is 123.12

使用RoundingMode.FLOOR RoundingMode.Floor充当可能数字的RoundingMode.DOWN和负数的RoundingMode.UP

DecimalFormat decimalFormat = new DecimalFormat("00");
        decimalFormat.setRoundingMode(RoundingMode.FLOOR);
        System.out.println("FORMAT:" + decimalFormat.format(-94.5));<br>The result will be: FORMAT: - 95



RoundingMode.CEILING充当可能数字的RoundingMode.UP和负面的RoundingMode.DOWN

DecimalFormat decimalFormat = new DecimalFormat("00");
        decimalFormat.setRoundingMode(RoundingMode.CEILING);
        System.out.println("FORMAT:" + decimalFormat.format(-94.5));<br>The result will be:FORMAT: -94