使用BigDecimal的小数点后的最大位数

时间:2010-10-21 18:30:11

标签: java bigdecimal

Java中BigDecimal值小数点后的最大位数是多少?

2 个答案:

答案 0 :(得分:13)

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

请参阅BigDecimal documentation

  

不可变,任意精度的带符号十进制数。 BigDecimal由任意精度整数非标度值和32位整数标度组成。如果为零或正数,则比例是小数点右侧的位数。如果是负数,则将数字的未缩放值乘以10来表示比例的否定。因此,BigDecimal表示的数字的值是(unscaledValue×10 -scale )。

答案 1 :(得分:2)

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

  

不可变,任意精度签名   十进制数。 BigDecimal包含   一个任意精度整数   未缩放的值和32位整数   规模。如果为零或正,则为比例   是右边的位数   小数点。如果是否定的话   未缩放的数字值是   乘以十来得到的力量   否定规模。的价值   由...表示的数字   因此BigDecimal(unscaledValue   ×10 ^( - 比例))。

根据Java's implementation of 32-bit integers

  

int:int数据类型是32位   签了两个补码整数。它   最小值为-2,147,483,648   最大值2,147,483,647   (包括的)。对于积分值,这个   数据类型通常是默认值   除非有理由(如   以上)选择别的东西。   这种数据类型很可能是   足够大的数字你的   程序将使用,但如果你需要一个   更广泛的价值观,使用时间长   代替。

这意味着对于零或正比例数字,您在小数点右侧有2,147,483,647个数字。 对于负标度数字,您将未标定的值移至小数点右侧2,147,483,648位。