Scala BigDecimal分部

时间:2009-08-27 09:50:09

标签: scala bigdecimal

scala 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!

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

1 个答案:

答案 0 :(得分:7)

这是Scala中的已知错误 - >见Ticket #1812。显然,它已在Scala 2.8中修复。您还可以从错误报告中下载修复程序,该修复程序实现附加BigDecimal的{​​{1}}。使用给定的Decimal.scala,我可以编写类似这样的内容并让它运行而不会出错:

MathContext

因此,您可以编译给定的val d1 = Decimal128(1) val d2 = Decimal128(3) val d3 = d1 / d2 // works, gives a truncated result 文件并将其添加到Decimal.scala或等待Scala 2.8,它已经在标准库中存在。

编辑有关对classpath实施此更改的更改,请参阅Scala标准库的revision 18021

希望有所帮助:)

BigDecimal