質問
どのような利用の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に固定されています。また、それに添付BigDecimal
でMathContext
を実装バグレポートから修正プログラムをダウンロードすることができます。 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
所属していません StackOverflow