Dividir entero y obtener valor entero

4 minutos de lectura

avatar de usuario
Ismail Saleh

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 entero por otro entero con /a veces obtengo un flotador:

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?

  • posibles preguntas duplicadas/2055469

    –Nikson Kanti Paul

    11 de octubre de 2012 a las 5:13

  • SI redondeas lo anterior, obtendrás 6que necesitas 5 o 6?

    – Starx

    11 de octubre de 2012 a las 5:13

  • @Starx: hay más de un tipo de redondeo: en.wikipedia.org/wiki/Rounding#Tie-breaking. Entonces, si redondea 5.6, no sabe lo que obtiene (sin especificar cómo desea que se redondee)

    – zerkms

    11 de octubre de 2012 a las 5:19

  • @zerkms, Sí, de hecho funciona como ceil() y floor() son las funciones que redondean de manera diferente.

    – Starx

    11 de octubre de 2012 a las 5:28

avatar de usuario
iLaYa ツ

usar round() función para obtener un valor entero redondeado.

round(8 / 3); // 3

o

Usar floor() función para obtener un valor entero

floor(8 / 3); // 2

  • no estoy de acuerdo piso (-8 / 3) === -3.0 pero debería ser -2

    – Escritos

    21 de abril de 2016 a las 16:54

  • Tenga en cuenta que floor() devolverá un float NO es un número entero, por lo que obtienes 2.0 y no 2. Emita el resultado para asegurarse de obtener un número entero: (int)floor(8/3)

    – Jasón

    17/08/2016 a las 15:50

  • @ByScripts -8/3 = -3 es una forma tan válida para que la división de enteros funcione como -8/3 = -2. El primero es “truncamiento hacia el infinito negativo”, y el segundo es “truncamiento hacia cero”. Ambos tienen ventajas, y diferentes idiomas eligen diferentes comportamientos. Por ejemplo, C se trunca hacia cero (al igual que PHP 7). intdiv), mientras que Python se trunca hacia el infinito negativo.

    –Mark Amery

    02/01/2017 a las 20:53

  • Tenga en cuenta que ceil() siempre se redondea hacia arriba.

    – cervezas inglesas

    28 mayo 2019 a las 19:21

En PHP 7, hay intdiv función haciendo exactamente lo que quieres.

Uso:

intdiv(8, 3);

Devoluciones 2.

  • Realmente es una gran sorpresa que esta función solo se presente con PHP 7 🙂 Bueno, más vale tarde que nunca.

    –Eric Gopak

    04/12/2016 a las 20:52

  • ¿Hay alguna solución como esta en php 5.6?

    –Usman Ali Maan

    15 de junio de 2018 a las 3:01


  • No es tan sencillo como esto, no. En PHP 5.6, use la respuesta aceptada 🙂

    – Marek Lisý

    15 de junio de 2018 a las 8:58

avatar de usuario
SP

No hay operador de división de enteros en PHP. 1/2 produce el float 0.5. El valor se puede convertir a 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

utilizar este….

intval(1700000 / 300000 )...

esto devuelve el valor entero.

PARA PHP 7 prueba intdiv() Función:

Sintaxis: int intdiv($dividend, $divisor)

          <?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";
         ?>

  • A partir de agosto de 2019, esta es la única respuesta correcta.

    – DomQ

    26 de agosto de 2019 a las 9:34

avatar de usuario
Besi

Puede usar la forma abreviada agregando |0 al final

8/3|0

  • A partir de agosto de 2019, esta es la única respuesta correcta.

    – DomQ

    26 de agosto de 2019 a las 9:34

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 número 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 puedes usar intdiv($p, $q) para realizar directamente la división de enteros. Esto es equivalente a (int)($p / $q) en PHP 5.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad