【向上取整向下取整】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[])
c语言round函数怎么使用{
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论