Java中BigDecimal
值小数点后的最大位数是多少?
答案 0 :(得分:13)
它(几乎)无限。如果将scale设置为整数的最大值,则可以在小数点后存储大约20亿个数字,但如果尝试执行此操作,可能会耗尽内存。如果您需要存储这么多数字以确定限制是一个问题,那么您可能需要重新考虑程序的设计。
不可变,任意精度的带符号十进制数。 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位。