15

BigDecimalJava中一个值的小数点后最多可以有多少位?

4

2 回答 2

15

它(几乎)是无限的。如果将 scale 设置为整数的最大值,您可以在小数点后存储大约 20 亿位数字,但如果您尝试这样做可能会耗尽内存。如果您需要存储如此多的数字以至于限制成为问题,那么您可能需要重新考虑程序的设计。

请参阅BigDecimal 文档

不可变的、任意精度的有符号十进制数。BigDecimal 由一个任意精度的整数未缩放值和一个 32 位整数刻度组成。如果为零或正数,则刻度是小数点右侧的位数。如果为负数,则将数字的未缩放值乘以 10 的负数次方。因此,BigDecimal 表示的数字的值是 (unscaledValue × 10 -scale )。

于 2010-10-21T18:33:11.487 回答
1

根据BigDecimal Java 2 Platform Standard Ed 中提到的内容。5.0

不可变的、任意精度的有符号十进制数。BigDecimal 由一个任意精度的整数未缩放值和一个 32 位整数刻度组成。如果为零或正数,则刻度是小数点右侧的位数。如果为负数,则将数字的未缩放值乘以 10 的负数次方。因此,BigDecimal 表示的数字的值是 (unscaledValue × 10^(-scale))。

根据Java 对 32 位整数的实现

int:int 数据类型是一个 32 位有符号二进制补码整数。它的最小值为 -2,147,483,648,最大值为 2,147,483,647(含)。对于整数值,此数据类型通常是默认选择,除非有理由(如上述)选择其他内容。这种数据类型很可能对于您的程序将使用的数字足够大,但如果您需要更广泛的值,请改用 long。

这意味着对于零或正比例数字,小数点右侧有 2,147,483,647 位。对于负比例数字,您将 unscaledValue 移动到小数点右侧 2,147,483,648 位。

于 2010-10-21T18:45:01.623 回答