在C中编写程序将摄氏温度转换为华氏温度时,以下公式给出了错误的输出:
int fahr = 9 / 5 * celsius + 32;
Run Code Online (Sandbox Code Playgroud)
现在,我明白这可能是一个问题,9/5被解释为一个整数,但我不明白的是使用double或float它仍然给出相同的错误输出.
奇怪的是,尽管将类型设置为以下公式,但以下公式给出了正确的输出int:
int fahr = celsius / 5 * 9 + 32;
Run Code Online (Sandbox Code Playgroud)
此外,我注意到甚至像下面这样简单的东西,当类型设置为时double,仍然输出为1.0而不是1.8:
double x = 9 / 5;
printf("%lf\n", x);
Run Code Online (Sandbox Code Playgroud)
我读过这个帖子:
但我仍然不明白为什么int fahr = celsius / 5 * 9 + 32;有效而不是int fahr = 9/5 * celsius+32;?
你用整数做数学.这个表达式:
9 / 5
Run Code Online (Sandbox Code Playgroud)
收益率为1C.当你说你使用double或时float,你可能只是改变了类型fahr,它对assignemtn运算符右侧发生的操作没有任何作用.要获得正确的行为,您还需要至少制作其中一个常量a double:
9.0 / 5
Run Code Online (Sandbox Code Playgroud)
同样,在本声明中:
double x = 9 / 5;
Run Code Online (Sandbox Code Playgroud)
您仍然在进行整数数学运算,然后将结果分配给double变量.没有其他事情发生.通过执行以下操作之一,您将得到正确的答案:
double x = 9.0 / 5;
double x = 9 / 5.0;
double x = 9.0 / 5.0;
Run Code Online (Sandbox Code Playgroud)
这个表达的原因是:
int fahr = celsius / 5 * 9 + 32;
Run Code Online (Sandbox Code Playgroud)
似乎工作只是一个操作顺序 - 在这里你将输入除以5然后乘以9,而不是先做常数操作.您仍然可以通过以下方式获得更准确的答案:
int fahr = celsius * 9 / 5 + 32;
Run Code Online (Sandbox Code Playgroud)
除此之外,您还可以在此表达式中执行浮点数学运算:
int fahr = celsius * 9.0 / 5 + 32;
Run Code Online (Sandbox Code Playgroud)
如果你想用整数进行原始计算,你肯定可以 - 你只需要在除以之前乘以:
int fahr = 9 * celsius / 5 + 32;
Run Code Online (Sandbox Code Playgroud)
该表达式相当于上面使用的表达式之一.
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |