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!
但这只是一团糟!我错过了什么吗?
答案 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