You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段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。

正确的实现方法

要让整数字面量的除法得到带小数的浮点数结果,只需确保至少一个操作数是浮点数类型即可,常见的实现方式有两种:

  1. 将其中一个整数字面量改为浮点数形式:
    p = 22.0/7;   // 或 22/7.0、22.0/7.0
    
  2. 对其中一个操作数进行强制类型转换:
    p = (float)22/7;  // 或 22/(float)7
    

内容的提问来源于stack exchange,提问作者Sudila Jayasekara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:45:13