2009-08-27 11 views
3

スカラーの除算演算子はどのように使用されますかBigDecimal?この作業を取得するためにスカラ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! 

これは単なる混乱です。何か不足していますか?

答えて

7

これはScalaの既知のバグです。>Ticket #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を待ち、その意志可能性のいずれかすでに標準ライブラリにあります。

EDITこれを実装するBigDecimalへの変更については、Scala標準ライブラリのrevision 18021を参照してください。

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

-- Flaviu Cipcigan

+0

素晴らしい答えだこと、感謝Flaviu –