Java 正确缩放BigDecimal

Java 正确缩放BigDecimal,java,precision,bigdecimal,Java,Precision,Bigdecimal,我有一种情况,我想缩放值,但在某些情况下,我得到一个异常,表明需要舍入 假设我有-9.999999和9.999999 也就是说,我只关心小数点后4点的精度。如何在不检查值是正值还是负值的情况下正确缩放这两个数字 例如,如果我使用RoundingMode.FLOOR,我会得到: 9.999999 scales to 99999 -9.999999 scales to -100000 我想要的分别是9.9999和-9.9999 我真的需要检查这里的标志吗?我觉得我错过了一些东西。总是向零进发,所以

我有一种情况,我想缩放值,但在某些情况下,我得到一个异常,表明需要舍入

假设我有
-9.999999
9.999999

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

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

9.999999 scales to 99999
-9.999999 scales to -100000
我想要的分别是
9.9999
-9.9999

我真的需要检查这里的标志吗?我觉得我错过了一些东西。

总是向零进发,所以这应该是你要找的。也就是说,当它循环时,它永远不会增加您的最后一个数字。这相当于在指定的比例下截断值。

总是向零舍入,所以这应该是您要寻找的。也就是说,当它循环时,它永远不会增加您的最后一个数字。这相当于在指定的比例下截断值。

总是向零舍入,所以这应该是您要寻找的。也就是说,当它循环时,它永远不会增加您的最后一个数字。这相当于在指定的比例下截断值。

总是向零舍入,所以这应该是您要寻找的。也就是说,当它循环时,它永远不会增加您的最后一个数字。这相当于在指定的比例下截断值

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 );
将刻度更改为2,四舍五入为123.12后,为您提供输出:
123.12678

使用RoundingMode.FLOOR RoundingMode.Floor作为RoundingMode.DOWN表示正数,作为RoundingMode.UP表示负数

DecimalFormat DecimalFormat=新的DecimalFormat(“00”);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
System.out.println(“格式:“+decimalFormat.FORMAT(-94.5))
结果将是:格式:-95


舍入模式。天花板用作舍入模式。向上表示正数,用作舍入模式。向下表示负数

DecimalFormat decimalFormat = new DecimalFormat("00");
        decimalFormat.setRoundingMode(RoundingMode.CEILING);
        System.out.println("FORMAT:" + decimalFormat.format(-94.5));<br>The result will be:FORMAT: -94
DecimalFormat DecimalFormat=新的DecimalFormat(“00”);
decimalFormat.setRoundingMode(RoundingMode.天花板);
System.out.println(“格式:“+decimalFormat.FORMAT(-94.5))
结果将是:格式:-94
将刻度更改为2,四舍五入为123.12后,为您提供输出:
123.12678

使用RoundingMode.FLOOR RoundingMode.Floor作为RoundingMode.DOWN表示正数,作为RoundingMode.UP表示负数

DecimalFormat DecimalFormat=新的DecimalFormat(“00”);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
System.out.println(“格式:“+decimalFormat.FORMAT(-94.5))
结果将是:格式:-95


舍入模式。天花板用作舍入模式。向上表示正数,用作舍入模式。向下表示负数

DecimalFormat decimalFormat = new DecimalFormat("00");
        decimalFormat.setRoundingMode(RoundingMode.CEILING);
        System.out.println("FORMAT:" + decimalFormat.format(-94.5));<br>The result will be:FORMAT: -94
DecimalFormat DecimalFormat=新的DecimalFormat(“00”);
decimalFormat.setRoundingMode(RoundingMode.天花板);
System.out.println(“格式:“+decimalFormat.FORMAT(-94.5))
结果将是:格式:-94
将刻度更改为2,四舍五入为123.12后,为您提供输出:
123.12678

使用RoundingMode.FLOOR RoundingMode.Floor作为RoundingMode.DOWN表示正数,作为RoundingMode.UP表示负数

DecimalFormat DecimalFormat=新的DecimalFormat(“00”);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
System.out.println(“格式:“+decimalFormat.FORMAT(-94.5))
结果将是:格式:-95


舍入模式。天花板用作舍入模式。向上表示正数,用作舍入模式。向下表示负数

DecimalFormat decimalFormat = new DecimalFormat("00");
        decimalFormat.setRoundingMode(RoundingMode.CEILING);
        System.out.println("FORMAT:" + decimalFormat.format(-94.5));<br>The result will be:FORMAT: -94
DecimalFormat DecimalFormat=新的DecimalFormat(“00”);
decimalFormat.setRoundingMode(RoundingMode.天花板);
System.out.println(“格式:“+decimalFormat.FORMAT(-94.5))
结果将是:格式:-94
将刻度更改为2,四舍五入为123.12后,为您提供输出:
123.12678

使用RoundingMode.FLOOR RoundingMode.Floor作为RoundingMode.DOWN表示正数,作为RoundingMode.UP表示负数

DecimalFormat DecimalFormat=新的DecimalFormat(“00”);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
System.out.println(“格式:“+decimalFormat.FORMAT(-94.5))
结果将是:格式:-95


舍入模式。天花板用作舍入模式。向上表示正数,用作舍入模式。向下表示负数

DecimalFormat decimalFormat = new DecimalFormat("00");
        decimalFormat.setRoundingMode(RoundingMode.CEILING);
        System.out.println("FORMAT:" + decimalFormat.format(-94.5));<br>The result will be:FORMAT: -94
DecimalFormat DecimalFormat=新的DecimalFormat(“00”);
decimalFormat.setRoundingMode(RoundingMode.天花板);
System.out.println(“格式:“+decimalFormat.FORMAT(-94.5))
结果将是:格式:-94

我刚刚更新,很抱歉我忘了这么做。一半结果是100000和100000,回答@GriffeyDog,可能有解释?我刚刚更新,很抱歉我忘了这么做。一半结果是100000和100000,回答@GriffeyDog,可能有解释?我刚刚更新,抱歉,我忘了这么做。一半的结果是100000和100000,回答@GriffeyDog,可能有解释?我刚刚更新,抱歉我忘了这么做。一半的结果是100000和100000,回答@GriffeyDog,可能有解释?谢谢。我对此感到有点困惑,但现在它是有意义的。
FLOOR
朝着负无限的方向旋转,这就是导致你所看到的行为的原因。阅读文档!谢谢我对此感到有点困惑,但现在它是有意义的。
FLOOR
朝着负无限的方向旋转,这就是导致你所看到的行为的原因。阅读文档!谢谢我对此感到有点困惑,但现在它有了意义。
FLOOR
朝着负无穷大的方向旋转,这就是导致负无穷大的原因