gpt4 book ai didi

java - Java 中从 double 转换为 int 时丢失精度

转载 作者:行者123 更新时间:2023-12-01 18:42:49 25 4
gpt4 key购买 nike

我尝试测试以下代码,它在 n 上给出了 434,这是我没有预料到的结果,这种精度损失的原因是什么?

double f = 4.35;
int n = (int) (100 * f); // n will be 434 - why?
n = (int) Math.round(100*f); // n will be 435

最佳答案

浮点并不完美。它使用近似值。

特别是,double无法表示所有数字。就像 1/3 不能用有限位数精确地表示为十进制一样,4.35 也不能用有限位数的二进制来表示.

因此我们得到了四舍五入的结果。值接近4.35,但并不完全相等。在本例中,它有点小,因此当您将其乘以 100 时,您不会得到 435,而是得到几乎 435,这并不完全相同。

当您转换为 int 时,您会截断结果,因此 434,999... 变为 434

相反,当您使用 Math.round 时,您可以将 434,999... 精确地转换为 435(这可以 准确地表示)。

如果需要精确表示 4.35,请查看 Java BigDecimal类型。

关于java - Java 中从 double 转换为 int 时丢失精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214559/

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