如果我不加括号而得到华氏温度,则得到的数字不同于与之相乘的数字。为什么会这样?
#include <stdio.h>
int main (){
double userinput, fahr1, fahr2;
printf("Enter a number in Cels ");
scanf("%lf", &userinput);
fahr1 = userinput*(9/5)+32;
fahr2 = userinput*9/5+32;
printf("fahr1 = %f and fahr2 = %f \n", fahr1, fahr2);
return 0;
}
输出:
Enter a number in Cels 15
fahr1 = 47.000000 and fahr2 = 59.000000
(9/5)
是整数除法,其结果为1
。但是userinput*9
被评估为双精度,然后除以5也被视为双精度。
解释很容易
没有括号:15.0 * 9 = 135.00 135.0 / 5 = 27.00 27.0 + 32 = 59.00
带括号:9/5 = 1(整数除法)15.0 * 1 = 15.0,15.0 + 32 = 47.00
这里
1)用户输入*(9/5)+32;
15.0*(1)+32 //1.8 goes to 1 because integer division
15.0+32
47.0
2)用户输入* 9/5 + 32;
15.0*9/5+32
135.0/5+32
27.0+32
59.0