我的应用程序在Java中使用double来表示浮点数。 double有17位有效数字的限制。 我们正在考虑重构代码以使用BigDecimal - 但是我在文档中找不到BigDecimal允许使用的有效位数的任何信息。
有关此方面的任何信息将非常有用,请提前感谢!
答案 0 :(得分:3)
答案是"可能比您可能需要的更多数字" ......但严格来说,有几个限制。
JVM堆的大小可能会限制可以创建的BigDecimal
对象的大小。 (您可能会得到OutOfMemoryError
...)
对于BigDecimal
的任何实现,由于类内部表示,可能存在特定于实现的限制。
对于Java 8中的实现,BigDecimal
数字的表示包含用于表示数字的BigInteger
和用于表示比例因子的int
。 BigInteger
状态的javadoc:
BigInteger
必须支持-2 Integer.MAX_VALUE (不包括)+2 Integer.MAX_VALUE (不包括)范围内的值,并且可以支持外部值该范围。
因此,Java 8 中BigDecimal
的理论最大精度小数位数至少为log 10 (2 2 31 - 1 )。
任何有关此信息都非常有用。
明确的信息来源是BigDecimal
的源代码及其依赖的类。
答案 1 :(得分:1)
来自JavaDoc:
BigDecimal为Immutable, arbitrary-precision signed decimal numbers.
所以有效位数是无限的,只受你记忆的限制。