Scala双十进制除法

Scala双十进制除法,scala,bigdecimal,Scala,Bigdecimal,scalaBigDecimal上的除法运算符有什么用途 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(

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!

但这真是一团糟!我遗漏了什么吗?

这是Scala中已知的错误->请参阅。显然,它在Scala 2.8中是固定的。您还可以从bug报告下载修复程序,该报告实现了一个带有
MathContext
BigDecimal
。使用给定的函数,我可以编写如下内容,并使其运行时不会出错:

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

有关实现此功能的
BigDecimal
的更改,请参见Scala标准库的编辑部分

希望有帮助:)

--Flaviu Cipcigan