我有一些像这样的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
如果我希望从此分区返回的数字只有两位小数,我该怎么办?
答案 0 :(得分:4)
你的表达
order.price.toBigDecimal.setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble / order.subPrice.toBigDecimal.setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble
基本上是Double
除Double
的一个除法,它会返回一个Double
的确切结果。我认为你所追求的可能是
(order.price / order.subPrice).toBigDecimal.setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble
产生一个带有2位小数的数字。注意我们舍入除法的结果而不是操作数,以免失去精度。