为何这段C语言代码同一操作输出不同?求原因与正确写法
问题解析:为何p的小数位全为0?
先看你给出的代码:
#include <stdio.h> int main(void) { float x, y ,z,p; x = 22; y = 7; p = 22/7; z = x/y; printf("%f\n",z); //output is 3.142857 printf("%f",p); //output is 3.000000 return 0; }
为什么p的小数位全为0?
C语言中,22和7都是整数字面量,当两个整数执行除法运算时,会触发整数除法规则:直接舍弃计算结果的小数部分,只保留商的整数部分。所以22/7的计算结果是整数3,之后将这个整数赋值给float类型的变量p时,会自动转换为浮点数3.000000,因此输出的小数位全为0。
两种计算方式的区别
p = 22/7:操作数均为整数,执行整数除法,结果先得到整数3,再转换为float类型赋值给p。z = x/y:x和y是float类型变量,执行浮点数除法,运算时会保留小数部分,最终得到符合float精度的结果3.142857。
正确的实现方法
要让整数字面量的除法得到带小数的浮点数结果,只需确保至少一个操作数是浮点数类型即可,常见的实现方式有两种:
- 将其中一个整数字面量改为浮点数形式:
p = 22.0/7; // 或 22/7.0、22.0/7.0 - 对其中一个操作数进行强制类型转换:
p = (float)22/7; // 或 22/(float)7
内容的提问来源于stack exchange,提问作者Sudila Jayasekara
相关产品推荐
相关产品推荐

