scala上的除法运算符有什么用BigDecimal?
val d1 = BigDecimal(2)
val d2 = BigDecimal(3)
val div = d1 / d2 //throws ArithmeticException: non-terminating decimal expansion
Run Code Online (Sandbox Code Playgroud)
为了使其工作,您需要DECIMAL128在小数上定义上下文.不幸的是,我能看到这样做的唯一方法是:
val div = new BigDecimal(d1.bigDecimal.divide(d2.bigDecimal, MathContext.DECIMAL128)) //OK!
Run Code Online (Sandbox Code Playgroud)
但这只是一团糟!我错过了什么吗?
这是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
Run Code Online (Sandbox Code Playgroud)
因此,您可以编译给定的Decimal.scala文件并将其添加到您的classpath或等待Scala 2.8,它将已经在标准库中.
编辑有关实现此更改的信息,请参阅Scala标准库的修订版18021BigDecimal.
希望能帮助到你 :)
-- Flaviu Cipcigan
| 归档时间: |
|
| 查看次数: |
2065 次 |
| 最近记录: |