2009-08-27 48 views
3

Scala BigDecimal的划分运算符有什么用?Scala BigDecimal division

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! 

但这只是一团糟!我错过了什么吗?

回答

7

这是Scala中的一个已知错误 - >请参阅Ticket #1812。显然,它固定在Scala 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,这将已经在标准库中拥有它。

编辑请参阅revision 18021斯卡拉标准库的更改BigDecimal执行此操作。

希望它能帮助:)

-- Flaviu Cipcigan

+0

这是一个很好的答案,谢谢Flaviu – 2009-08-27 14:29:14