conorgriffin:
2.10について示されるように、以下の試験がスカラ2.11と2.12に渡すが、失敗します
class JsonToXmlParserTest extends Suite with Matchers with AssertionsForJUnit {
@Test
def testBigDecimalPrecision(): Unit = {
val decimalString = "12345678901234567890.12345678901234567890"
val bigDecimal = BigDecimal(decimalString)
val javaBigDecimal = new java.math.BigDecimal(decimalString)
javaBigDecimal.compareTo(bigDecimal.bigDecimal) should be(0)
}
}
org.scalatest.exceptions.TestFailedException: -1 was not equal to 0
at org.scalatest.MatchersHelper$.indicateFailure(MatchersHelper.scala:346)
at org.scalatest.Matchers$ShouldMethodHelper$.shouldMatcher(Matchers.scala:6668)
at org.scalatest.Matchers$AnyShouldWrapper.should(Matchers.scala:6704)
下記のデバッガの出力を参照してください、ブレークポイントは、テストアサーションにありました
あるBigDecimal
精度は、Scalaの2.10における既知の問題?
conorgriffin:
これはデフォルトによって引き起こされるMathContext
使用インチ スカラ2.10が使用されているMathContext
34文字の精度で、スカラ2.11は、40文字の精度のいずれかを使用しているように見えます。これを解決するために私が指定することができMathContext
、すべてのScalaのバージョンのパスを次のようにテストを変更するように、無制限の精度を使用します
class JsonToXmlParserTest extends Suite with Matchers with AssertionsForJUnit {
@Test
def testBigDecimalPrecision(): Unit = {
val decimalString = "12345678901234567890.12345678901234567890"
val bigDecimal = BigDecimal(decimalString, MathContext.UNLIMITED)
val javaBigDecimal = new java.math.BigDecimal(decimalString, MathContext.UNLIMITED)
javaBigDecimal.compareTo(bigDecimal.bigDecimal) should be(0)
}
}