W językach takich jak C czy Python, jeśli podzielę liczbę całkowitą przez liczbę całkowitą, otrzymam liczbę całkowitą:
>>> 8/3
2
Ale w PHP, jeśli podzielę liczbę całkowitą przez inną liczbę całkowitą /
, czasami otrzymuję liczbę zmiennoprzecinkową:
php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
Chciałbym zrobić podział tak jak w Pythonie lub C, tak aby 8/3 to 2. Jak mogę to zrobić w PHP?
6
, czego potrzebujesz 5 lub 6?ceil()
ifloor()
są funkcjami, które zaokrągla się w inny sposób.Odpowiedzi:
użyj
round()
funkcji, aby uzyskać zaokrągloną wartość całkowitą.round(8 / 3); // 3
lub
Użyj
floor()
funkcji, aby uzyskać wartość całkowitąfloor(8 / 3); // 2
źródło
floor()
zwrócifloat
NIE liczbę całkowitą, więc otrzymujesz2.0
i nie2
. Rzuć wynik, aby upewnić się, że otrzymasz liczbę całkowitą:(int)floor(8/3)
intdiv
), podczas gdy Python obcina do ujemnej nieskończoności.W PHP 7 jest funkcja intdiv, która robi dokładnie to, co chcesz.
Stosowanie:
intdiv(8, 3);
Zwroty
2
.źródło
W PHP nie ma operatora dzielenia liczb całkowitych. 1/2 daje wartość zmiennoprzecinkową 0,5. Wartość można rzutować na liczbę całkowitą, aby zaokrąglić ją w dół, lub funkcja round () zapewnia lepszą kontrolę nad zaokrąglaniem.
var_dump(25/7); // float(3.5714285714286) var_dump((int) (25/7)); // int(3) var_dump(round(25/7)); // float(4)
Podręcznik PhP
źródło
Użyj tego....
intval(1700000 / 300000 )...
zwraca wartość całkowitą.
źródło
(int)(1700000 / 300000);
użyj rzutowania typów.
źródło
(0.1 + 0.7) * 10
to7.99999999999999911182158029987476766109466552734375
. Jest całkowicie poprawne, że(int)
rzutowanie obcina tę wartość do 7. Podczas dzielenia liczby całkowitej przez inną liczbę całkowitą, tak jak w przypadku pytania i odpowiedzi tutaj, taki błąd zmiennoprzecinkowy nie może zmienić wyniku po obcięciu.Istnieje kilka sposobów wykonywania dzielenia liczb całkowitych w PHP. Język nie ma operatora dzielenia liczb całkowitych, ale istnieje kilka opcji zaokrąglania ilorazu zmiennoprzecinkowego do liczby całkowitej:
<?php $pos = 1; $neg = -1; $divisor = 2; // No rounding (float division) var_dump($pos / $divisor); // 0.5 (float) var_dump($neg / $divisor); // -0.5 (float) // Round toward zero (like C integer division) var_dump((int)($pos / $divisor)); // 0 (int) var_dump((int)($neg / $divisor)); // 0 (int) // Round half away from zero var_dump(round($pos / $divisor)); // 1 (float) var_dump(round($neg / $divisor)); // -1 (float) // Round down var_dump(floor($pos / $divisor)); // 0 (float) var_dump(floor($neg / $divisor)); // -1 (float) # And on PHP 7 you can round toward zero with intdiv(): var_dump(intdiv($pos, $divisor)); // 0 (int) var_dump(intdiv($neg, $divisor)); // 0 (int) Rounded toward zero
W PHP 7 możesz użyć
intdiv($p, $q)
do bezpośredniego dzielenia liczb całkowitych. Jest to odpowiednik(int)($p / $q)
w PHP 5.źródło
Możesz użyć skrótu, dodając na końcu | 0
8/3 | 0
źródło
DLA PHP 7
intdiv()
funkcja try :<?php $dividend = 19; $divisor = 3; echo intdiv($dividend, $divisor); ?>
W przypadku starszych wersji PHP:
<?php // Convert $total_minutes to hours and minutes. $total_minutes = 640; $minutes = $total_minutes % 60; $hours = ($total_minutes - $minutes) / 60; echo "Time taken was $hours hours $minutes minutes"; ?>
źródło
Dla wersji PHP 7 =>
intdiv(a,b)
A dla wersji mniejszych niż 7 (np. 5.6) =>
(int)floor(abs(a/b))
źródło