質問

どのような利用の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では既知のバグです - >参照チケット#1812 に。どうやら、それはScalaの2.8に固定されています。また、それに添付BigDecimalMathContextを実装バグレポートから修正プログラムをダウンロードすることができます。 Decimal.scala に与えられたを使用して、私のような何かを書くことができますこれと、それはエラーなしで実行するために取得ます:

val d1 = Decimal128(1)
val d2 = Decimal128(3)
val d3 = d1 / d2 // works, gives a truncated result

そのため、すでに標準ライブラリでそれを持っている、与えられたDecimal.scalaファイルをコンパイルしてclasspathにそれを追加したり、スカラ座2.8のために待つことができるのいずれか。

編集を参照してください。改正の18021 のこれを実装するBigDecimalへの変更のためのScalaの標準ライブラリ。

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

-- Flaviu Cipcigan

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top