遭遇的问题
在学习时有一个课后题要求计算两个变量的加减乘除以及取余,想到除法可能会计算出小数,就用浮点型接收除法的结果
int a,b;
double div;
div = a / b;
但是算出来的结果却不对
解决办法
问题在于:
C语言中,两个同类型的变量做运算得出的结果还是该类型的。而两个1不同类型的变量做运算会先将精度较低的变量提升到另一个变量的类型,再做运算
所以上面a与b做运算后的结果还是int类型,之后这个结果自动提升为double类型并赋给div
解决办法:
再运算前先将一个变量转换为double类型,即:
int a,b;
double div;
div = (double)a / b;
首先将a提升为double类型,之后double与int做除法运算,int自动提升为double再与其运算,得到的结果为double类型,并赋给div
实验
int a = 8;
int b = 3;
int c = 6;
int d1 = a / b;//2
int d2 = a / c;//1
int d3 = -a / b;//-2
int d4 = a / -b;//-2
int d5 = a / -c;//-1
printf("%d\n", d1);
printf("%d\n", d2);
printf("%d\n", d3);
printf("%d\n", d4);
printf("%d\n", d5);
输出:
2
1
-2
-2
-1
看来跟课本上说的一样是向零取整