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
朝着负无穷大的方向旋转,这就是导致负无穷大的原因