C中的华氏温度转换公式问题

Mar*_*tin 3 c

在C中编写程序将摄氏温度转换为华氏温度时,以下公式给出了错误的输出:

    int fahr = 9 / 5 * celsius + 32;
Run Code Online (Sandbox Code Playgroud)

现在,我明白这可能是一个问题,9/5被解释为一个整数,但我不明白的是使用doublefloat它仍然给出相同的错误输出.

奇怪的是,尽管将类型设置为以下公式,但以下公式给出了正确的输出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)

我读过这个帖子:

C程序将华氏温度转换为摄氏温度

但我仍然不明白为什么int fahr = celsius / 5 * 9 + 32;有效而不是int fahr = 9/5 * celsius+32;

Car*_*rum 8

你用整数做数学.这个表达式:

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)

该表达式相当于上面使用的表达式之一.