什么用在阶BigDecimal除法运算符?

val d1 = BigDecimal(2)
val d2 = BigDecimal(3)
val div = d1 / d2 //throws ArithmeticException: non-terminating decimal expansion

为了得到这个工作,你需要定义的小数一个DECIMAL128上下文。不幸的是,我可以看到这样做的唯一方法是:

val div = new BigDecimal(d1.bigDecimal.divide(d2.bigDecimal, MathContext.DECIMAL128)) //OK!

但是,这仅仅是一个烂摊子!我缺少的东西吗?

有帮助吗?

解决方案

这是Scala一个已知的错误 - >见票证#1812 。显然,它是固定在斯卡拉2.8。您还可以下载从实现与连接到它BigDecimal一个MathContext错误报告的修正。使用给定的 Decimal.scala ,我喜欢写东西这一点,并让它运行没有错误:

val d1 = Decimal128(1)
val d2 = Decimal128(3)
val d3 = d1 / d2 // works, gives a truncated result

因此,您既可以编译给出Decimal.scala文件,并将其添加到您的classpath或等待斯卡拉2.8,这将已经有它的标准库。

修改请参见修订18021 为改变Scala的标准库BigDecimal实现这一点。

希望它能帮助:)

-- Flaviu Cipcigan

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top