舍入与绝对值
floor、ceil、round 和 fabs。
舍入与绝对值 是 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 反馈 — 无需本地设置。