如C或Python語言,如果我用一個整數除以整數,我得到一個整數整數除法,並獲得整數值
>>> 8/3
2
但在PHP,如果我用另一個整數除以整數/
,有時我得到一個float:
php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
我想要做師像Python或C,使8/3是2.如何能做到這一點在PHP?
如C或Python語言,如果我用一個整數除以整數,我得到一個整數整數除法,並獲得整數值
>>> 8/3
2
但在PHP,如果我用另一個整數除以整數/
,有時我得到一個float:
php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
我想要做師像Python或C,使8/3是2.如何能做到這一點在PHP?
沒有整數除法運算符在PHP。 1/2產生浮動0.5。值可以被轉換爲一個整數以將其向下舍入,或者round()函數可以更精確地控制舍入。
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
使用本....
intval(1700000/300000)...
此返回整數值。
(int)(1700000/300000);
使用類型鑄造。
永遠不會拋出float到int! <?php echo(int)((0.1 + 0.7)* 10); ?>「7」! –
噢!只是因爲(0.1 + 0.7)== 0.799999 ...而不是0.8 :) :) :) –
@ luc.chante您給出的示例是由於浮點錯誤而發生的。 '(0.1 + 0.7)* 10'的確切值是'7.99999999999999911182158029987476766109466552734375'。 ((int)''''''''''''''強制轉換爲7的完全正確的。當將整數除以另一個整數時,就像這裏的問題和答案一樣,這樣的浮點錯誤不能改變截斷後的結果。 –
您可以通過添加使用簡短| 0至年底
8/3 | 0
-1;這是對「按位或」運算符的混淆濫用。無可否認,它*工作*(因爲操作數到按位運算符被轉換爲整數,這會將浮點值向下舍入,實際操作按位或0不會導致生成的整數值發生變化),但是爲了讓開發人員讀取代碼來理解*爲什麼*它的工作原理,他們需要知道PHP的按位運算符的投射行爲(這是99%的PHP開發人員所不具備的瑣碎知識),並且按位或0保留一個值不變(不保證,因爲並不是所有的web開發人員都瞭解位操作)。 –
@MarkAmery,mos開發人員不知道這一事實並不意味着它不起作用。很明顯,這是一個很好的理由,所以人們會學習如何使用它。 – Besi
代碼高爾夫贏得 –
有幾種方法在PHP中執行整數除法。語言不具有整數除法操作,但也有四捨五入浮點商爲整數幾種選擇:
<?php
$pos = 1;
$neg = -1;
$divisor = 2;
// No rounding (float division)
var_dump($pos/$divisor); // 0.5
var_dump($neg/$divisor); // -0.5
// Round toward zero (like C integer division)
var_dump((int)($pos/$divisor)); // 0
var_dump((int)($neg/$divisor)); // 0
// Round half away from zero
var_dump(round($pos/$divisor)); // 1
var_dump(round($neg/$divisor)); // -1
// Round down
var_dump(floor($pos/$divisor)); // 0
var_dump(floor($neg/$divisor)); // -1
# And on PHP 7 you can round toward zero with intdiv():
var_dump(intdiv($pos, $divisor)); // 0
var_dump(intdiv($neg, $divisor)); // 0 Round toward zero
在PHP 7,您可以使用intdiv($p, $q)
直接執行整數除法。這相當於在PHP 5上的(int)($p/$q)
。
請注意,並非所有這裏顯示的方法都具有相同的返回類型 - 「(int)'cast和'intdiv()'調用返回int,但round()和floor()都返回float。 –
可能重複[questions/2055469](http://stackoverflow.com/questions/2055469/php-typecasting-float-int) –
如果您將以上內容取消,您將獲得'6',你需要5或6? – Starx
@Starx:有多種舍入類型:http://en.wikipedia.org/wiki/Rounding#Tie-breaking。所以,如果你輪到5.6 - 你不知道你得到了什麼(沒有指定你想如何舍入) – zerkms