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 の既知のバグです ->チケット #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 標準ライブラリのリビジョン 18021を参照してください。BigDecimal

それが役に立てば幸い :)

-- Flaviu Cipcigan

于 2009-08-27T10:56:46.617 に答える