整数除法

Ber*_*aud 5 erlang integer division

根据定义,整数除法返回商.

为什么4613.9145 div 100.会出错("坏参数")?

mik*_*iku 14

因为div参数需要是整数./接受任意数字作为参数,尤其是浮点数.因此,对于您的示例,以下内容将起作用:

1> 4613.9145 / 100.  
46.139145
Run Code Online (Sandbox Code Playgroud)

要区别对比,请尝试:

2> 10 / 10.
1.0

3> 10 div 10.
1
Run Code Online (Sandbox Code Playgroud)

文档:http://www.erlang.org/doc/reference_manual/expressions.html


更新:有时表示的整数除法\可以定义为:

a \ b = floor(a / b)
Run Code Online (Sandbox Code Playgroud)

所以你需要一个floor函数,它不在标准的lib中.

% intdiv.erl
-module(intdiv).
-export([floor/1, idiv/2]).

floor(X) when X < 0 ->
    T = trunc(X),
    case X - T == 0 of
        true -> T;
        false -> T - 1
    end;

floor(X) -> 
    trunc(X) .

idiv(A, B) ->
    floor(A / B) .
Run Code Online (Sandbox Code Playgroud)

用法:

$ erl
...
Eshell V5.7.5  (abort with ^G)
> c(intdiv).
{ok,intdiv}
> intdiv:idiv(4613.9145, 100).
46
Run Code Online (Sandbox Code Playgroud)

  • @Bertaud:我放弃了;) (2认同)

rvi*_*ing 5

Erlang中的整数除法div定义为将两个整数作为输入并返回一个整数.您在之前的评论http://mathworld.wolfram.com/IntegerDivision.html中提供的链接仅在其示例中使用整数,因此在此讨论中并不真正有用.使用truncround将允许您使用任何您想要的参数.