gpt4 book ai didi

java - 大数字的 BigDecimal 在浮点值中无法正常工作

转载 作者:行者123 更新时间:2023-12-01 16:44:41 24 4
gpt4 key购买 nike

有一个BigDecimal java中的数据类型。当我将数字 5190000000 声明为 BigDecimal 时,如下所示:

BigDecimal a = new BigDecimal(5190000000L * 1.0F);

,它很兴奋,可以看到以下输出:

Output:
5190000128

虽然我省略了 F 作为浮点值,但它是正确的,如下所示:

BigDecimal a = new BigDecimal(5190000000L * 1.0);

Output:
5190000000

这是什么?还有F参数怎么会出错?我真的很困惑!!!!

编辑

jdk版本为1.8

最佳答案

在构造BigDecimal之前,需要先计算括号内的表达式。

因此,5190000000 * 1.0F 被计算为 float 值,但该值并不完全是 5190000000。为什么?因为5190000000无法用float准确表示。在创建 BigDecimal 之前,已经丢失了一些精度。因此,您看到的输出并不准确。

在第二种情况下,5190000000 * 1.0 被计算为 double,并且 double 具有足够的精度来准确表示 5190000000。您可能会问,为什么这次它的计算结果为 double ?因为 1.0F 是浮点文字,而 1.0 是 double 文字。这决定了表达式的类型。

要获取准确的值,请使用字符串构造函数:

BigDecimal bd = new BigDecimal("5190000000");
bd = bd.multiply(BigDecimal.ONE); // if you insist on multiplying it by 1

关于java - 大数字的 BigDecimal 在浮点值中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54386156/

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