如果使用内置的取整函数 floor(),则取整的规则为向下取整,即取最大的整数,小于等于原数。例如:
floor(3.14) # 输出 3
floor(-3.14) # 输出 -4
如果使用内置的取整函数 ceil(),则取整的规则为向上取整,即取最小的整数,大于等于原数。例如:
ceil(3.14) # 输出 4
ceil(-3.14) # 输出 -3
如果使用内置的取整函数 round(),则取整的规则为四舍五入,即取最接近原数的整数。例如:
round(3.14) # 输出 3
round(3.5) # 输出 4
round(-3.14) # 输出 -3
round(-3.5) # 输出 -4
注意:floor() 和 ceil() 函数需要使用 math.h 头文件。
#include <math.h>
另外,还可以使用类型转换运算符(即 (int) 运算符)将浮点数强制转换成整型,实现取整的效果。例如:
(int)3.14 # 输出 3
(int)-3.14 # 输出 -3
但是这种方法不会准确地处理负数
(int)-3.5 # 输出 -3(不是正确的答案)
向下例如:
int a = 5,b = 2
int c = a/b
printf("%d",c)//2.5向下取整 输出2
1.向上取整问题:如果整除
X/M=N,则
X=N*M
+
d,其中余数
d
的范围是
[0,M-1]考虑数字
Y
=
X+(M-1)
=
(N*M+d)
+
(M-1)
=
(N+1)*M
+
(d-1),很容易发现,当
d>1
时,整除
Y/M=N+1,就是说在
X+(M-1)
实现了向上取整;当d=0时,整除Y/M=N,结果是准确的值。2.
数据类型转换问题:数字后面添加
.f 表示这是一个浮点数,浮点数的运算符
/ 是普通的除法,不是整除,得到的结果仍然是浮点数,转换成整数的时候直接把小数点后面的舍去了,不能实现向上取整。3.
向下取整不能说是C的缺陷。否则,反过来,难道默认向上取整就不是缺陷?