BigDecimal允许使用的有效位数是多少 - Java

时间:2016-08-31 08:19:31

标签: java bigdecimal

我的应用程序在Java中使用double来表示浮点数。 double有17位有效数字的限制。 我们正在考虑重构代码以使用BigDecimal - 但是我在文档中找不到BigDecimal允许使用的有效位数的任何信息。

有关此方面的任何信息将非常有用,请提前感谢!

2 个答案:

答案 0 :(得分:3)

答案是"可能比您可能需要的更多数字" ......但严格来说,有几个限制。

  1. JVM堆的大小可能会限制可以创建的BigDecimal对象的大小。 (您可能会得到OutOfMemoryError ...)

  2. 对于BigDecimal的任何实现,由于类内部表示,可能存在特定于实现的限制。

  3. 对于Java 8中的实现,BigDecimal数字的表示包含用于表示数字的BigInteger和用于表示比例因子的intBigInteger状态的javadoc:

      

    BigInteger必须支持-2 Integer.MAX_VALUE (不包括)+2 Integer.MAX_VALUE (不包括)范围内的值,并且可以支持外部值该范围。

    因此,Java 8 中BigDecimal 的理论最大精度小数位数至少为log 10 (2 2 31 - 1 )。

      

    任何有关此信息都非常有用。

    明确的信息来源是BigDecimal的源代码及其依赖的类。

答案 1 :(得分:1)

来自JavaDoc:
BigDecimalImmutable, arbitrary-precision signed decimal numbers.

所以有效位数是无限的,只受你记忆的限制。