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

Java Scala BigDecimal无法转换自己创建的十进制字符串表示形式,java,scala,bigdecimal,Java,Scala,Bigdecimal,在进行生成性测试时,我遇到了以下问题: 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(

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

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)
!String.apply:在属性评估时引发异常。
>参数0:0E+2147483648
>异常:java.lang.NumberFormatException:null
BigDecimal.java.math.BigDecimal.(BigDecimal.java:511)
BigDecimal.java.math.BigDecimal.(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\u值(Integer.MIN\u值+1)和Integer.MAX\u值之间,包括在内


我强调,Integer.MAX_VALUE=2147483647。

这个大十进制值很奇怪,它实际上是零,写得很复杂。这个值是如何构造的?@laune,它是由
ArbigDecimal.ArbigDecimal
构造的,这是一个
scala.math.BigDecimal
scalacheck
生成器,用于
scala.math.BigDecimal
也许这个代码没有试图保持在“合理”的范围内。这种大小的数字是不现实的-将其与宇宙中的原子数进行比较…既然测试通过定义来测试不合理,那么这样如何:我会强调另一条,因为这是违反的。@som snytt指数E+2147483648超出了MAX_值。@som snytt“我们中的一些人…”:这就是为什么我用黑体字写的原因。