Tengo una parte en mi código donde necesito dividir y tengo un resto en lugar de una respuesta decimal.¿Dividir con un resto en php?
¿Cómo puedo hacer esto?
gracias
Tengo una parte en mi código donde necesito dividir y tengo un resto en lugar de una respuesta decimal.¿Dividir con un resto en php?
¿Cómo puedo hacer esto?
gracias
Usted puede hacer lo que usted está describiendo utilizando el "%" (módulo) del operador. El siguiente código es un ejemplo de división con un resto.
$remainder=$num % $divideby;
$number=explode('.',($num/$divideby));
$answer=$number[0];
echo $answer.' remainder '.$remainder;
$quotient = intval($dividend/$divisor);
$remainder = $dividend % $divisor;
Usando intval
en lugar de floor
redondeará el cociente hacia cero, proporcionando resultados precisos cuando el dividendo es negativo.
puede producir un resultado incorrecto si es negativo, p. si dividend = 5 y divisor = 2 calcularías 3 como el cociente en lugar de 2 –
Sí, noté que poco después de publicar y revisé mi respuesta para usar 'intval' en lugar de' floor'. –
use '$ remainder = fmod ($ dividend, $ divisor)' cuando se usan enteros – Sablefoste
Una solución para los números positivos y negativos:
$quotient = $dividend/$divison;
$integer = (int) ($quotient < 0 ? ceil($quotient) : floor($quotient));
$remainder = $dividend % $divisor;
Si tiene que mirar hacia arriba, el operador% se llama mod (o módulo).
utilizar esta función Su una gran variedad Descripción gama gmp_div_qr (resource $n , resource $d [, int $round ])
The function divides n by d .
referencia: http://php.net/manual/en/function.gmp-div-qr.php
tuve que desarrollar este enfoque porque mi numerador era un valor flotante y el módulo redondeaba resultados.
Utilizando el enfoque de Raffaello ofrecido here para dividir flotadores y tomar de la solución de Sam152 arriba se produjo lo siguiente.
$a = 2.1;
$b = 8;
$fraction = $a/(float) $b;
$parts = explode('.', $fraction);
$int = $parts[0];
$remainder = $score - ($int*$b) ;
El mathematical correct answer es:
$reminder = $dividend % $divisor;
$quotient = ($dividend - $reminder)/$divisor;
y el recordatorio verifica la condición 0 <= $reminder < abs($divisor)
.
Desafortunadamente, muchos lenguajes de programación (incluido PHP) no manejan correctamente los números negativos desde el punto de vista matemático. Utilizan different rules para calcular el valor y el signo del recordatorio.
Si tiene que trabajar con números negativos y obtener los resultados correctos matemáticas, puede utilizar las siguientes fórmulas:
$reminder = (($dividend % $divider) + abs($divider)) % abs($divider);
$quotient = ($dividend - $reminder)/$divider;
Se basan en la forma en PHP calcula el módulo con operandos negativos y que no puede proporcionar el resultado correcto si están portados a un idioma diferente.
Aquí hay un script que implementa estas fórmulas y compara los resultados con los valores proporcionados como ejemplo en la respuesta matemática correcta mencionada anteriormente.
No tengo idea de por qué se votó negativamente. – demonkoryu
Un ejemplo para mostrar cadenas como 1 hora 6 minutos usando floor() y el módulo (%) si sólo minutos/segundos dadas:
$minutes=126;
if($minutes < 60) {
$span= $minutes.' min.';
} else {
$rem=$minutes % 60;
$span=floor($minutes/60).' h. '. (($rem>0) ? $rem.' min.':'');
}
// echo 'Hello Jon Doe, we notify you that even will last for 2 h. 6 min.
echo 'Hello Jon Doe, we notify you that event will last for '.$span;
No utilice una función de cadena en un tipo de flotador. Mejor uso 'floor()'. – Gumbo
usando ciegamente el piso podría fallar en un resultado negativo –