题
什么用在阶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
不隶属于 StackOverflow