同一种程序,把double 换成 int,输出结果不一样,为什么呢

#include<iostream>
using namespace std;
int main() {
    int he = 480;
    int grade_a = he / (1 + 1.4);
    int grade_uim = grade_a * 1.4;
    cout << grade_a << endl;
    cout << grade_uim << endl;
    return 0;

这种,追后输出200和279;把两个grade前面的int换成doube,就可以输出200和280.
刚学编程,百思不得其解

这个主要还是精度问题,你在计算过程中使用了小数,一般还是使用float、double定义准确,我自己运行了一下结果都是280

浮点型精度丢失,你按这个搜索,三言两语不好解释。

前面两位说得没错,就是精度问题

【以下回答由 GPT 生成】

首先,让我们分析一下代码中的问题。

在这段代码中,我们定义了一个变量he并将其赋值为480。然后,我们通过计算grade_a来得到一个整数值,即he除以(1 + 1.4)。最后,我们通过grade_a乘以1.4来计算grade_uim

然而,问题出现在这里:

int grade_a = he / (1 + 1.4);

表达式he / (1 + 1.4)使用整数除法进行计算,整数除法将向下取整。这意味着任何小数位都将被舍弃,而只保留整数部分。

对于he / (1 + 1.4)这个表达式,结果将是200。这是因为 (1 + 1.4) 的结果是2.4,但根据整数除法规则,它将被截断为2。然后,整数除法会将 480 除以2,并返回最大的整数值结果200。

所以,将int grade_a修改为double grade_a可以解决这个问题。这样,grade_a变量将是一个带有小数位的浮点数。

double grade_a = he / (1 + 1.4);

现在,grade_a将保存一个准确的结果2.4。接下来,我们通过乘以1.4来计算grade_uim。由于grade_a是一个浮点数,因此乘以1.4的结果将是一个准确的浮点数值。因此,grade_uim等于2.4乘以1.4,结果是3.36。

double grade_uim = grade_a * 1.4;

所以,当将double替换为int时,由于整数除法的截断和整数乘法的舍入,最终的结果会有所不同。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^