C Academy · 课时

舍入与绝对值

floor、ceil、round 和 fabs。

第 4 / 4 课13 个步骤

舍入与绝对值 是 CoddyKit 上的免费 C Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C Academy 课程共包含 4 节课。

舍入和绝对值

本课介绍用于调整数值的函数:用于舍入的 floor、ceil、round 和 trunc,以及用于求绝对值的 fabs。

它们都位于 math.h 中,并且处理 double 值。

floor 函数

floor(x) 向下舍入到最接近的整数,也就是朝负无穷方向舍入。

因此,floor(3.9) 是 3.0,而 floor(-1.2) 是 -2.0。

#include <stdio.h>
#include <math.h>

int main(void) {
    printf("%.1f\n", floor(3.9));
    printf("%.1f\n", floor(-1.2));
    return 0;
}

ceil 函数

ceil(x) 向上舍入到最接近的整数,也就是朝正无穷方向舍入。

因此,ceil(3.1) 是 4.0,而 ceil(-1.8) 是 -1.0。

#include <stdio.h>
#include <math.h>

int main(void) {
    printf("%.1f\n", ceil(3.1));
    printf("%.1f\n", ceil(-1.8));
    return 0;
}

round 函数

round(x) 舍入到最接近的整数。正好处于中间的值远离零舍入。

因此,round(2.5) 是 3.0,而 round(2.4) 是 2.0。

#include <stdio.h>
#include <math.h>

int main(void) {
    printf("%.1f\n", round(2.5));
    printf("%.1f\n", round(2.4));
    return 0;
}

trunc 函数

trunc(x) 直接去掉小数部分,始终朝零方向移动。

因此,trunc(3.9) 是 3.0,而 trunc(-3.9) 是 -3.0。

#include <stdio.h>
#include <math.h>

int main(void) {
    printf("%.1f\n", trunc(3.9));
    printf("%.1f\n", trunc(-3.9));
    return 0;
}

比较四种函数

对于数值 2.7,结果各不相同:

  • floor(2.7) = 2.0(向下)
  • ceil(2.7) = 3.0(向上)
  • round(2.7) = 3.0(最接近)
  • trunc(2.7) = 2.0(向零)

请选择符合您意图的函数。

使用 fabs 求绝对值

fabs(x) 返回浮点数的绝对值:该数与零之间的距离,始终为非负数。

因此,fabs(-7.5) 是 7.5。

#include <stdio.h>
#include <math.h>

int main(void) {
    printf("%.1f\n", fabs(-7.5));
    printf("%.1f\n", fabs(7.5));
    return 0;
}

fabs 与 abs 的区别

请注意:abs(来自 stdlib.h)处理整数,而 fabs(来自 math.h)处理 double 值。

对 double 使用 abs 会先截掉小数部分。对于浮点数,请始终使用 fabs。

转换为 int

这些函数返回 double。要将整数值存储为 int,请对结果进行类型转换。

最稳妥的做法是先使用 round,再进行类型转换,这样像 2.999 这样的值就不会意外变成 2。

#include <stdio.h>
#include <math.h>

int main(void) {
    double x = 4.6;
    int whole = (int)round(x);
    printf("whole = %d\n", whole);
    return 0;
}

距离示例

无论两个值谁大谁小,fabs 都可以方便地测量它们相差多远。

这里计算两个温度之间的差值。

#include <stdio.h>
#include <math.h>

int main(void) {
    double a = 5.0, b = 12.5;
    printf("gap = %.1f\n", fabs(a - b));
    return 0;
}

舍入到小数位

要舍入到小数点后两位,请先乘以 100,进行舍入,再除以 100。

这个技巧利用 round 让货币形式的数值保持整齐。

#include <stdio.h>
#include <math.h>

int main(void) {
    double price = 3.14159;
    double r = round(price * 100.0) / 100.0;
    printf("%.2f\n", r);
    return 0;
}

快速检查

回想一下每个舍入函数的行为。

回顾

您学会了 floor(向下)、ceil(向上)、round(最接近)和 trunc(向零),以及使用 fabs 求 double 值的绝对值。

请记住,对于浮点数要使用 fabs,而不是 abs;需要整数时,请将结果转换为 int。恭喜您完成 math.h 课程!

免费开始

用 AI 导师学习 C — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
39
课程
144

常见问题解答

「舍入与绝对值」课时是免费的吗?

是的 — 「舍入与绝对值」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C Academy 课程的其余内容,请升级到 CoddyKit PRO。 C Academy 课程共包含 4 节课。

「舍入与绝对值」这节课中我会学到什么?

floor、ceil、round 和 fabs。 你通过在浏览器中直接运行的动手代码来练习 C Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「舍入与绝对值」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C Academy 课中编写并运行代码吗?

能。每节 C Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 包含 math.h
  2. 幂与根
  3. 三角函数与对数
  4. 舍入与绝对值
← 返回 C Academy