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))