#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
时,由于整数除法的截断和整数乘法的舍入,最终的结果会有所不同。