C语言函数返回int值乘(2/9)打印结果为0问题求解
问题根因
核心错误是整数除法的截断特性+类型转换位置错误:
- C语言中,当
/运算符的左右两个操作数都是整数类型时,会执行整数除法,运算结果会直接向零截断为整数,不会保留小数部分。你代码里的2/9两个操作数都是int类型,编译阶段就会算出结果为0。 - 你的类型转换写法
(float)(2/9)括号优先级最高,会先算完括号内的整数除法得到int类型的0,再把0转为float类型的0.0,无论后面乘的函数返回值是多少,0乘任何数结果都是0,最终打印自然始终为0。
修复方案
核心原则是:让除法运算在浮点类型下执行,不要先完成整数除法再做类型转换,两种常用正确写法:
- 直接将除法的其中一个操作数写为浮点字面量,触发浮点运算:
// 2.0f是float类型字面量,9会自动提升为float参与运算,除法结果保留小数 printf("resultat est : %f", 2.0f / 9 * somme_diagonale(F));
- 调整类型转换的位置,不要把整数除法表达式整体括起来强转,只强转其中一个操作数即可:
// 先把2转为float,再和int类型的9做除法,自动走浮点运算逻辑 printf("resultat est : %f", (float)2 / 9 * somme_diagonale(F));
你当前场景下somme_diagonale(F)返回值为165,修复后计算结果约为36.666668,符合预期。
内容的提问来源于stack exchange,提问作者ihab
相关产品推荐
相关产品推荐

