【问题标题】:Scala BigDecimal divisionScala BigDecimal 除法
【发布时间】:2009-08-27 09:50:08
【问题描述】:

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 bigdecimal


    【解决方案1】:

    这是 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 标准库的 revision 18021 以了解对实现此功能的 BigDecimal 的更改。

    希望对你有帮助:)

    -- Flaviu Cipcigan

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2019-09-20
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多