舍拉和分裂舍入

时间:2018-05-14 21:59:25

标签: scala

我有一些像这样的Scala部门代码:

order.price.toBigDecimal.round(MathContext.DECIMAL128) / order.subPrice.toBigDecimal).toString

这不起作用。它抛出了这个错误:

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

我写了这个作为回报,但它没有圆。它给了我一个这样的数字:9.8431984893148934

order.price.toBigDecimal.setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble / order.subPrice.toBigDecimal.setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble

如果我希望从此分区返回的数字只有两位小数,我该怎么办?

1 个答案:

答案 0 :(得分:4)

你的表达

order.price.toBigDecimal.setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble / order.subPrice.toBigDecimal.setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble

基本上是DoubleDouble的一个除法,它会返回一个Double的确切结果。我认为你所追求的可能是

(order.price / order.subPrice).toBigDecimal.setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble

产生一个带有2位小数的数字。注意我们舍入除法的结果而不是操作数,以免失去精度。