在erlang的API中,erlang:trunc/1 是就近取整,erlang:round/1是四舍五入的,
整理下:對於正數的向上和向下取整,
1 %% 向上取整 2 ceil(N) -> 3 T = trunc(N), 4 case N == T of 5 true -> T; 6 false -> 1 + T 7 end.
1 %% 向下取整 2 floor(X) -> 3 T = trunc(X), 4 case (X < T) of 5 true -> T - 1; 6 _ -> T 7 end.
而對於負數的向上和向下取整,稍微變通下,即可使用於全部數(包括正數和負數):
%% 取整 大於X的最小整數 ceil(X) -> T = trunc(X), if X - T == 0 -> T; true -> if X > 0 -> T + 1; true -> T end end.
%% 取整 小於X的最大整數 floor(X) -> T = trunc(X), if X - T == 0 -> T; true -> if X > 0 -> T; true -> T-1 end end.
