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

C语言中如何返回指定小数位数的数值?(以保留一位小数为例)

在C语言中返回保留指定小数位数的数值

针对你写的平均值函数,想要返回仅保留一位小数的结果(比如3.465返回3.4),这里有几种可行的实现方式,我来一步步给你讲清楚:

方法1:通过数学运算截断小数

你可以利用乘法+取整+除法的组合来实现截断到一位小数的效果。具体来说,先把数值乘以10,通过强制类型转换取整数部分(会自动截断小数),再除以10.0变回浮点数。

修改后的代码如下:

double avg(int* grade, int len){
    int i;
    double sum = 0.0;  // 建议用double,精度比float更高
    for(i=0; i<len; i++){
        sum += *(grade + i);
    }
    double average = sum / len;
    // 截断到一位小数
    return (int)(average * 10) / 10.0;
}

比如当average是3.465时,3.465*10=34.65,强制转成int就是34,再除以10.0得到3.4,正好符合你的需求。

方法2:使用标准库函数floor(向下取整)

如果你需要严格的向下取整效果(和正数截断逻辑一致),也可以用math.h里的floor函数:

#include <math.h>

double avg(int* grade, int len){
    int i;
    double sum = 0.0;
    for(i=0; i<len; i++){
        sum += *(grade + i);
    }
    double average = sum / len;
    return floor(average * 10) / 10.0;
}

注意使用这个函数需要包含头文件<math.h>,编译的时候可能需要加上-lm参数(比如GCC编译:gcc yourfile.c -o yourfile -lm)。

额外提示

  • 如果你需要的是四舍五入到一位小数(比如3.465变成3.5),那逻辑要调整:可以用round(average *10)/10.0,同样需要依赖<math.h>。
  • 原代码里sum用了float,建议改成double,因为返回值是double,能避免不必要的类型转换精度损失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:55:21