2011-04-26 23 views
39

如何劃分數字,但排除在PHP中的其餘部分?如何在PHP中除數而不餘數?

+4

你能澄清你的意思提醒嗎? – Kartik 2011-04-26 23:30:18

+1

Kartik:13/2 = 6餘數爲1,因爲兩個均勻地進入13次六次,剩下一個剩下的一個剩下一個。 – 2011-04-26 23:31:39

+3

Kartik正在開玩笑說請求者是如何拼寫其餘的。 – 2011-04-26 23:34:14

回答

70

只需將結果值轉換爲int即可。

$n = (int) ($i/$m); 

有趣的功能(這取決於你想要達到什麼,如果你期望負整數得到devided)是floor()ceil()round()

+0

嚴格來說,這是一個壞主意。雖然它適用於小數值(包括所有32位整數),但浮點數不能代表所有64位整數。如果'$ i'是2^54 + 2並且'$ m'是2,那麼除法的結果不能是2^53 + 1,因爲這不能表示爲雙精度浮點數(我不能測試一下64位系統上的實際結果會是什麼)。 – ralokt 2016-08-11 14:38:42

-7

使用模在PHP中:

$n = $i % $m; 
+3

-1 - 這不僅不回答這個問題,它還提供了具體要求省略的問題:餘數。 – danorton 2014-02-28 07:12:10

+5

對於那些喜歡矯枉過正的人:它可以使用模塊'$ n =($ i - $ i%$ m)/ $ m;':D – KingCrunch 2014-03-03 03:06:16

-1

,或者你可能只是做INTVAL(13/2) 得到6

5

從最實用的目的,接受的答案是正確的。

但是,對於整數爲64位寬的構建,並非所有可能的整數值都可表示爲雙精度浮點型;有關詳情,請參閱我對已接受答案的評論。

$n = ($i - $i % $m)/$m; 

(從下另一個答案KingCrunch的評論採取代碼)的變化將取決於所期望的舍入行爲(請記住,取模運算的結果可能是負的)來避免這種問題。

0

除了決定上述像$result = intval($a/$b)有一個特殊情況:

如果你需要一個整數除法(沒有餘數)由兩部分功率($b2^N),可以使用按位右移操作:

$result = $a >> $N; 

其中$ N是32位操作系統上從1到32的數字或64位數字的64。

有時候它很有用,因爲它對於$ b的情況來說是最快的決定,它是某種程度的冪。

並有一個向後(小心因爲溢出!)操作兩個由力量放大:

$result = $a << $N; 

希望這有助於有人了。

1

PHP 7爲這個名爲intdiv的新內置函數。

實施例:

$result = intdiv(13, 2); 

$result的本例中的值將是6

您可以在PHP documentation中找到該功能的完整文檔。