在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.