En lenguajes como C o Python, si divido un número entero por un número entero, obtengo un número entero:
>>> 8/3
2
Pero en PHP, si divido un número entero por otro entero con /
, a veces obtengo un flotante:
php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
Me gustaría hacer una división como en Python o C, de modo que 8/3 sea 2. ¿Cómo puedo hacer eso en PHP?
6
, ¿qué necesita 5 o 6?ceil()
yfloor()
son las funciones las que redondean de manera diferente.Respuestas:
use la
round()
función para obtener un valor entero redondeado.round(8 / 3); // 3
o
Utilice la
floor()
función para obtener un valor enterofloor(8 / 3); // 2
fuente
floor()
devolverá unfloat
NO un número entero, por lo que obtiene2.0
y no2
. Transmita el resultado para asegurarse de obtener un número entero:(int)floor(8/3)
intdiv
), mientras que Python se trunca hacia el infinito negativo.En PHP 7, hay una función intdiv que hace exactamente lo que quieres.
Uso:
intdiv(8, 3);
Devoluciones
2
.fuente
No hay un operador de división de enteros en PHP. 1/2 produce el flotador 0.5. El valor se puede convertir en un número entero para redondearlo hacia abajo, o la función round () proporciona un control más preciso sobre el redondeo.
var_dump(25/7); // float(3.5714285714286) var_dump((int) (25/7)); // int(3) var_dump(round(25/7)); // float(4)
Manual de PhP
fuente
utilizar esta....
intval(1700000 / 300000 )...
esto devuelve el valor entero.
fuente
(int)(1700000 / 300000);
utilizar tipo de fundición.
fuente
(0.1 + 0.7) * 10
es7.99999999999999911182158029987476766109466552734375
. Es perfectamente correcto que una(int)
conversión trunca este valor a 7. Al dividir un entero por otro entero, como es el caso en la pregunta y respuesta aquí, tal error de punto flotante no puede cambiar el resultado posterior al truncamiento.Hay varias formas de realizar la división de enteros en PHP. El lenguaje no tiene un operador para la división de enteros, pero hay varias opciones para redondear el cociente de punto flotante a un entero:
<?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
En PHP 7 se puede utilizar
intdiv($p, $q)
para realizar directamente la división de enteros. Esto es equivalente a(int)($p / $q)
PHP 5.fuente
Puede usar la forma abreviada agregando | 0 al final
8/3 | 0
fuente
PARA PHP 7, prueba la
intdiv()
función:<?php $dividend = 19; $divisor = 3; echo intdiv($dividend, $divisor); ?>
Para versiones anteriores de 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"; ?>
fuente
Para PHP versión 7 =>
intdiv(a,b)
Y para versiones menores a 7 (como 5.6) =>
(int)floor(abs(a/b))
fuente