gpt4 book ai didi

java - 为什么这两个表达式计算出不同的值?

转载 作者:行者123 更新时间:2023-12-01 07:59:36 26 4
gpt4 key购买 nike

我似乎无法找到为什么这两个表达式计算出不同的结果。有人可以启发我吗?

double var1 = 53, var2 = 51.95;
int res1 = (int)((var1 - var2)*100);
int res2 = (int)(var1*100 - var2*100);

Output: res1 = 104 res2 = 105

最佳答案

浮点无法精确存储所有值,特别是它们无法精确存储所有十进制值。 51.95 无法存储在 double 中 - 您真正存储的是接近该值。当您将几乎但不完全的值乘以 100 时,就会放大该误差。 res1res2 执行此操作的方式略有不同,因此它们得到略有不同的结果也就不足为奇了。

这里有更多细节。

您可以使用this converter弄清楚 double 的真正值(value)是什么。例如,51.95 的二进制表示形式为 01000010010011111100110011001101,对应于十进制数 51.95000076293945。这是 var2真实值;这是 double 可以表示的最接近 51.95 的数字。 var1 就是它看起来的样子,53。

那么,我们首先看一下 res1。 53 - 51.95000076293945 是 1.04999923706055。使用该转换器,我们发现该值不能精确地存储在 double 型中;你实际上会得到什么 1.0499992。将其乘以 100,得到 104.99992,它被截断为 int 104。

现在res2。 53*100是5300,51.95000076293945*100是5195.000076293945,实际上是5195.0。 5300-5195.0 是 105。

关于java - 为什么这两个表达式计算出不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26248582/

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