2009-02-23 25 views

Respuesta

13

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; 
+1

No utilice una función de cadena en un tipo de flotador. Mejor uso 'floor()'. – Gumbo

+1

usando ciegamente el piso podría fallar en un resultado negativo –

15
$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.

+0

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 –

+0

Sí, noté que poco después de publicar y revisé mi respuesta para usar 'intval' en lugar de' floor'. –

+0

use '$ remainder = fmod ($ dividend, $ divisor)' cuando se usan enteros – Sablefoste

5

Una solución para los números positivos y negativos:

$quotient = $dividend/$divison; 
$integer = (int) ($quotient < 0 ? ceil($quotient) : floor($quotient)); 
$remainder = $dividend % $divisor; 
1

Si tiene que mirar hacia arriba, el operador% se llama mod (o módulo).

0

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) ; 
2

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.

+0

No tengo idea de por qué se votó negativamente. – demonkoryu

0

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;