Java 如何在不舍入的情况下截断大十进制数

Java 如何在不舍入的情况下截断大十进制数,java,rounding,bigdecimal,arithmeticexception,Java,Rounding,Bigdecimal,Arithmeticexception,在我的代码中进行了一系列计算之后,我得到了一个值为0.01954 然后我需要将这个BigDecimal乘以100,我希望计算的值是1.95 我不希望执行任何向上或向下舍入操作,我只希望截断任何超过两位小数的值 我试着将scale设置为2,但后来我得到了一个算术异常,表示需要舍入。如何在不指定舍入的情况下设置比例?使用包括舍入模式的设置比例覆盖: value.setScale(2, RoundingMode.DOWN); 使用或 当我使用一个大十进制设置另一个大十进制时,我遇到了一个截断问题。源

在我的代码中进行了一系列计算之后,我得到了一个值为
0.01954

然后我需要将这个
BigDecimal
乘以
100
,我希望计算的值是
1.95

我不希望执行任何向上或向下舍入操作,我只希望截断任何超过两位小数的值


我试着将scale设置为2,但后来我得到了一个
算术异常
,表示需要舍入。如何在不指定舍入的情况下设置比例?

使用包括舍入模式的设置比例覆盖:

value.setScale(2, RoundingMode.DOWN);
使用或


当我使用一个大十进制设置另一个大十进制时,我遇到了一个截断问题。源可以有任何具有不同十进制值的值

BigDecimal source = BigDecimal.valueOf(11.23); // could 11 11.2 11.234 11.20 etc
为了正确地截断和缩放两个小数,我必须使用源的字符串值,而不是BigDecimal或double值

new BigDecimal(source.toPlainString()).setScale(2, RoundingMode.FLOOR))
我用它来表示货币,结果总是有2位小数

  • 11->11.00
  • 11.2->11.20
  • 11.234->11.23
  • 11.238->11.28
  • 11.20->11.20

  • Math.floor(VALUE)
    将返回一个int-val,那么为什么不:
    (double)((double)Math.floor(1.95*100)/(double)100)
    新的BigDecimal(4343.33)。setScale(2,RoundingMode.DOWN)返回4343。32@user666您使用的构造函数接受浮点值,而浮点值本身可能存在舍入错误。使用接受字符串的构造函数:
    new BigDecimal(“4343.33”).setScale(2,RoundingMode.DOWN)
    这是正确的,我尝试了它,它成功了。但是如果我已经有一个bigDecimal对象了呢?它会被当作绳子吗?
    new BigDecimal(source.toPlainString()).setScale(2, RoundingMode.FLOOR))