gpt4 book ai didi

java - 为什么 Bigdecimal(double d) 构造仍然存在?

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:11 25 4
gpt4 key购买 nike

我注意到这个构造函数存在很大的痛苦(即使在 Stack Overflow 上也是如此)。人们使用它,即使文档明确指出:

The results of this constructor can be somewhat unpredictable http://java.sun.com/javase/6/docs/api/java/math/BigDecimal.html#BigDecimal(double)

我什至见过 JSR-13正在APPROVED建议说明:

Existing specifications that might be deprecated: We propose deprecating the BigDecimal(double) constructor, which currently gives results that are different to the Double.toString() method.

尽管如此,构造函数尚未被弃用。

我很想听听对此的任何看法。

最佳答案

考虑 BigDecimal(double) 的行为是正确的,在我看来,我不太确定它真的会是这样的问题。

我不完全同意 BigDecimal(double) 构造函数中文档的措辞:

The results of this constructor can be somewhat unpredictable. One might assume that writing new
BigDecimal(0.1)
in Java creates a BigDecimal which is exactly equal to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625.

(强调已添加。)

与其说unpredictable,不如说是unexpected,即便如此,对于那些没有意识到表示限制的人来说,这也是意想不到的行为十进制数的 floating point values .

只要记住浮点值不能精确表示所有十进制值,使用 BigDecimal(0.1) 返回的值 0.1000000000000000055511151231257827021181583404541015625 实际上是有意义的.

如果 BigDecimal(double) 构造函数实例化的 BigDecimal 对象是一致的,那么我认为结果是可预测的。

我猜测为什么 BigDecimal(double) 构造函数没有被弃用是因为这种行为可以被认为是正确的,只要知道浮点表示的工作原理,构造函数并不奇怪。

关于java - 为什么 Bigdecimal(double d) 构造仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com