3

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!

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

4

1 回答 1

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或者等待 Scala 2.8,它已经包含在标准库中。

编辑请参阅Scala 标准库的修订版 18021BigDecimal以了解实现此功能的更改。

希望能帮助到你 :)

-- Flaviu Cipcigan

于 2009-08-27T10:56:46.617 回答