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

发布于 2024-09-28 12:11:23 字数 53 浏览 4 评论 0原文

Java 中 BigDecimal 值的小数点后最多可以有多少位?

What is the maximum number of digits we can have after the decimal point of a BigDecimal value in Java?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执笏见 2024-10-05 12:11:24

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

请参阅 BigDecimal 文档

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

It's (almost) unlimited. You can store roughly 2 billion digits after the decimal point if scale is set to the maximum value of an integer, although you may run out of memory if you try to do this. If you need to store so many digits that the limit is a problem then you probably need to rethink the design of your program.

See the BigDecimal documentation:

Immutable, arbitrary-precision signed decimal numbers. A BigDecimal consists of an arbitrary precision integer unscaled value and a 32-bit integer scale. If zero or positive, the scale is the number of digits to the right of the decimal point. If negative, the unscaled value of the number is multiplied by ten to the power of the negation of the scale. The value of the number represented by the BigDecimal is therefore (unscaledValue × 10-scale).

冷情 2024-10-05 12:11:24

根据 BigDecimal Java 2 Platform 中提到的内容标准版。 5.0:

不可变、任意精度有符号
小数。 BigDecimal 包含
任意精度整数
未缩放的值和 32 位整数
规模。如果为零或正数,则比例
是右边的位数
小数点。如果为负数,则
该数字的未缩放值是
乘以十的次方
尺度的否定。的价值
所代表的数字
因此 BigDecimal 是 (unscaledValue
× 10^(-规模))。

根据Java对32位整数的实现

int:int数据类型是32位
有符号二进制补码整数。它
最小值为 -2,147,483,648
最大值为 2,147,483,647
(包括)。对于整数值,这
数据类型一般都是默认的
选择除非有原因(比如
上面)选择其他东西。
这种数据类型很可能是
对于您的数字来说足够大
程序会使用,但如果你需要
取值范围更广,使用时间长
相反。

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

According to what is mentioned in the BigDecimal Java 2 Platform Standard Ed. 5.0:

Immutable, arbitrary-precision signed
decimal numbers. A BigDecimal consists
of an arbitrary precision integer
unscaled value and a 32-bit integer
scale. If zero or positive, the scale
is the number of digits to the right
of the decimal point. If negative, the
unscaled value of the number is
multiplied by ten to the power of the
negation of the scale. The value of
the number represented by the
BigDecimal is therefore (unscaledValue
× 10^(-scale)).

According to Java's implementation of 32-bit integers:

int: The int data type is a 32-bit
signed two's complement integer. It
has a minimum value of -2,147,483,648
and a maximum value of 2,147,483,647
(inclusive). For integral values, this
data type is generally the default
choice unless there is a reason (like
the above) to choose something else.
This data type will most likely be
large enough for the numbers your
program will use, but if you need a
wider range of values, use long
instead.

This means that for zero or positive scale numbers you have 2,147,483,647 digits to the right of the decimal point.
For negative scale numbers, you have unscaledValue shifted to the right of the decimal point by 2,147,483,648 digits.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文