Q
整数除法
4
A
回答
13
对于div
参数需要是整数。 /
接受任意数字作为参数,特别是浮点数。因此,对于你的榜样,下面将工作:
1> 4613.9145/100.
46.139145
要对比的差异,请尝试:
2> 10/10.
1.0
3> 10 div 10.
1
文档:http://www.erlang.org/doc/reference_manual/expressions.html
更新:Integer division,有时表示\
,可以被定义为:
a \ b = floor(a/b)
所以你需要一个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) .
用法:
$ erl
...
Eshell V5.7.5 (abort with ^G)
> c(intdiv).
{ok,intdiv}
> intdiv:idiv(4613.9145, 100).
46
1
我不知道你相当的意思 “的定义。”语言设计者可以自由地定义他们想要的操作符。在Erlang中,他们定义了div
只接受整数参数。
如果您有兴趣了解Erlang创作者的设计决策,可以给他们发邮件。另外,如果你足够好奇地筛选(非常短的)文法,你可以找到它here。好运!
5
Erlang中的整数除法div
定义为将两个整数作为输入并返回一个整数。您在之前的评论http://mathworld.wolfram.com/IntegerDivision.html中给出的链接仅在其示例中使用整数,因此在此讨论中没有多大用处。使用trunc
和round
将允许您使用您希望的任何参数。
0
不确定你要找的是@Bertaud。无论在其他地方如何定义,Erlang的div
仅适用于整数。您可以将参数整数转换调用div
前:
trunc(4613.9145) div 100.
,或者您可以使用/
,而不是div
和商转变为后来的整数:
trunc(4613.9145/100).
而且trunc
可能会或可能不会是什么你想 - 你可能想要round
,或地板或天花板(在Erlang的标准库中没有定义,但不难定义你自己,因为miku用上面的floor
做过)。这是Erlang不承担任何事情并为您完成转换的原因之一。但无论如何,如果你想在Erlang中使用两个非整数的整数商,你必须在某个地方有某种明确的转换步骤。
相关问题
- 1. 整数除法
- 2. Python3整数除法
- 3. 长整数除法
- 4. SSE整数除法?
- 5. ARM整数除法算法
- 6. 小数整数除法
- 7. 整数除法,并获得整数值
- 8. 整数除法与常规除法
- 9. 整数除法属性
- 10. 整数除法与舍入
- 11. 整数除法用C
- 12. 整数除法,舍入
- 13. awk中的整数除法
- 14. 截断整数除法
- 15. 整数除法与random.randint
- 16. 整数除法总是零
- 17. 整数除法和在JavaScript
- 18. 统一整数除法器
- 19. 整数除法在Python
- 20. 整数除法在MySQL
- 21. 整数除法和零
- 22. 使用整数除法
- 23. 地板整数除法
- 24. 乘除法除无符号整数
- 25. 大整数除法 - Knuth的算法D
- 26. 使用乘法执行整数除法
- 27. MIPS:整数乘法和除法
- 28. 整数除法算法分析
- 29. 整数除法或浮点乘法?
- 30. Python中的// //整数除法方法
我不同意:结果是46,而不是46.139145。 div =整数除法,/ =浮点除法 – Bertaud 2011-01-20 17:13:19
无论你提出什么,这是不合逻辑的。trunc(N/100)给出结果。 div函数似乎不尊重整数除法的定义。 – Bertaud 2011-01-20 17:51:02