Scala BigDecimal 无法转换由其自身创建的十进制字符串表示形式

Scala BigDecimal fails to translate a decimal String representation created by itself

在进行生成测试时,我遇到了以下问题:

import org.scalacheck.Properties
import org.scalacheck.Prop.forAll

object BigDecimalSpec extends Properties("BigDecimal") {
  property("apply") = forAll(Arbitrary.arbBigDecimal.arbitrary) {
    x => x == BigDecimal(x.toString())
  }
}

失败:

! String.apply: Exception raised on property evaluation.
> ARG_0: 0E+2147483648
> Exception: java.lang.NumberFormatException: null
java.math.BigDecimal.<init>(BigDecimal.java:511)
java.math.BigDecimal.<init>(BigDecimal.java:757)
scala.math.BigDecimal$.apply(BigDecimal.scala:119)
scala.math.BigDecimal$.apply(BigDecimal.scala:117)

为什么 BigDecimal 无法翻译自己创建的十进制 String 表示?

这是根据定义。来自 BigDecimal 的 javadoc:

指数由字符 'e' ('\u0065') 或 'E' ('\u0045') 后跟一位或多位小数组成。指数的值必须介于 -Integer.MAX_VALUE (Integer.MIN_VALUE+1) 和 Integer.MAX_VALUE, 之间(含)。

我强调,Integer.MAX_VALUE = 2147483647.