C语言中使用int参数的函数返回float值却输出0.0000的问题
整数除法导致float返回值为0的问题解决
问题原因
函数内的运算都是整数类型运算:stick_length*human_weight得到160(int类型),car_weight+human_weight得到1480(int类型),整数除法会直接截断小数部分,160/1480的结果是0,再转换为float返回就是0.0,所以最终输出0.0000。
解决方案
只需要让运算过程中触发浮点数计算即可,以下两种方式都可以:
方式一:强制转换运算数为float
将分子或分母中的任意一个运算数强制转换为float,整个表达式就会按浮点数规则计算:
float lift_a_car(const int stick_length, const int human_weight, const int car_weight) { // 转换分子为float return (float)(stick_length * human_weight) / (car_weight + human_weight); }
如果担心整数乘法溢出(比如参数值较大时),可以提前转换单个参数:
float lift_a_car(const int stick_length, const int human_weight, const int car_weight) { return ((float)stick_length * human_weight) / (car_weight + human_weight); }
方式二:使用浮点数常量触发自动类型提升
也可以将分母转换为float类型,同样能触发浮点数运算:
float lift_a_car(const int stick_length, const int human_weight, const int car_weight) { return (stick_length * human_weight) / (float)(car_weight + human_weight); }
验证结果
修改后运行测试代码:
printf("%.4f\n", lift_a_car(2, 80, 1400));
会输出正确结果 0.1081。
内容的提问来源于stack exchange,提问作者Richard Gaál
相关产品推荐
相关产品推荐

