【向上取整/向下取整】C语言向上或向下取整 函数
C语言有以下几种取整方法:
1、直接赋值给整数变量。如:
int i = 2.5; 或 i = (int) 2.5;
这种方法采用的是舍去小数部分
2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),但是整数除法对负数的取整结果和使用的C编译器有关。
3、使用floor函数。floor(x)返回的是小于或等于x的最大整数。如:
floor(2.5) = 2
floor(-2.5) = -3
4、使用ceil函数。ceil(x)返回的是大于x的最小整数。如:
ceil(2.5) = 3
ceil(-2.5) = -2
floor()是向负无穷大舍入,floor(-2.5) = -3;ceil()是向正无穷大舍入,ceil(-2.5) = -2。
5、round(x)返回x的四舍五入整数值。
但是在C里面round、ceil和floor()函数是返回double型,
先在网上发现一个简单的向上取整方法;
这里我们用<>表示向上取整,[]表示向下取整,那么怎么来表示这个值呢?
我们可以证明:
=[(N-1)/M]+1 (0
不失一般性,我们设N=Mk+r(0<=r
1)当r>0时,
左边:=<(Mk+r)/M>==k+=k+1
右边:[(N-1)/M]+1=[(Mk+r-1)/M]+1=[k+(r-1)/M]+1=k+1+[(r-1)/M]=k+1
2)当r=0
左边:=k
右边:[(N-1)/M]+1=[(Mk-1)/M]+1=[(M(k-1)+M-1)/M]+1=[k-1+(M-1)/M]+1=k+[(M-1)/M]=k
命题得证。
有了这个公式,我们在代码里可以这样计算:
int nn=(N-1)/M +1
.
因为'/'是往下取整的。
用法:
1
2
3
4
5
6
7
|
#include
double
ceil
(
double
x);
double
floor
(
double
x);
double
round(
double
x);
|
ceil(x)返回不小于x的最小整数值(然后转换为double型)。
floor(x)返回不大于x的最大整数值。
round(x)返回x的四舍五入整数值。
给个例子test.c:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include
#include
int
main(
int
argc,
const
char
*argv[])
{
float
num = 1.4999;
printf
(
"ceil(%f) is %f\n"
, num,
ceil
(num));
printf
(
"floor(%f) is %f\n"
, num,
floor
(num));
printf
(
"round(%f) is %f\n"
, num, round(num));
return
0;
}
|
编译:$cc test.c -lm 执行:$./a.out ceil(1.499900) is 2.000000 floor(1.499900) is 1.000000 round(1.499900) is 1.000000
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)