C語言有下面幾種取整方法:
1. 直接賦值給整數變量
這樣的方法採用的是舍去小數部分。
2、整數除法運算符‘ / ’取整
‘ / ’本身就有取整功能(int / int),可是整數除法對負數的取整結果和使用的C編譯器有關。
3、使用floor函數
floor(x)返回的是小於或等於x的最大整數。
如:
floor(3.5) = 3
floor(-3.5) = -4
4、使用ceil函數
ceil(x)返回的是大於x的最小整數。如:
ceil(3.5) = 4
ceil(-3.5) = -3
floor()是向負無窮大舍入,floor(-3.5) = -4。
ceil()是向正無窮大舍入。ceil(-3.5) = -3。
可是在C里面ceil和floor()函數是返回double型。
5.向上取整方法
在網上發現一個簡單的向上取整方法。
這里我們用<>表示向上取整,[]表示向下取整,我們能夠證明:
<N/M>= [(N-1)/M]+1 (0 < M <= N M,N∈Z)
不失一般性。我們設N = Mk+r (0 <= r < M,k∈Z),
(1)當r > 0時。
左邊:<N/M> = <(Mk+r)/M >= <k+r/M>= k+<r/M> = 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時。
左邊:<N/M> = 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
式中' / '是往下取整的。
