[已解决]
我正在学习C,在学习过程中遇到了一些问题。
当我尝试在一个等式中计算 int 数据类型和 float 数据类型时,我最终得到了 2 个不同的输出。我很困惑,因为从逻辑上讲结果应该是一样的。
这是我的代码版本 1 和版本 2。不同之处在于变量 z。
所有输入都是11
更新 1
感谢大家的评论和回答。但我仍然对变量 p
在情况 1 中扮演什么角色以及它如何导致变量 z
为 1 而不是 0 感到困惑?
案例一
int main()
{
float a, fee, p;
int x, y,z;
scanf("%f", &a);
fee = 0.6 * a;
x = (int)(fee);
y = (int)(2 * fee - 2 * x);
p = fee * 10.0;
z = (int)(p - 10 * x - 5 * y);
printf("%f %d %d %d", fee, x, y, z);
return 0;
}
案例二
int main()
{
float a, fee, p;
int x, y,z;
scanf("%f", &a);
fee = 0.6 * a;
x = (int)(fee);
y = (int)(2 * fee - 2 * x);
z = (int)(fee * 10.0 - 10 * x - 5 * y);
printf("%f %d %d %d", fee, x, y, z);
return 0;
}
最佳答案
1) z = (int)(p - 10 * x - 5 * y);
F I I I I // Float or Int
2) z = (int)(fee * 10.0 - 10 * x - 5 * y); // semicolon removed
F D I I I I // Float, Double or Int
1) 中的所有计算均以 float
精度完成,2) 中的所有计算均以 double
精度完成。
建议:在使用浮点值时始终优先使用 double
。
https://stackoverflow.com/questions/69491552/