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