primaria - verificando si un número es divisible por 6 PHP
multiplos de numeros en php (11)
Quiero verificar si un número es divisible por 6 y si no, necesito aumentarlo hasta que se vuelva divisible.
Cómo puedo hacer eso ?
¿Por qué no usas el Modulus Operator ?
Prueba esto:
while ($s % 6 != 0) $s++;
¿O es esto lo que querías decir?
<?
$s= <some_number>;
$k= $s % 6;
if($k !=0) $s=$s+6-$k;
?>
Entonces quieres el siguiente múltiplo de 6, ¿es eso?
Puedes dividir tu número por 6, luego ceil
y multiplicarlo de nuevo:
$answer = ceil($foo / 6) * 6;
Para fanáticos de la micro-optimización:
if ($num % 6 != 0)
$num += 6 - $num % 6;
Más evaluaciones de %
, pero menos ramificación / bucle. :-PAG
Simplemente ejecute un ciclo while que continuará en bucle (y aumentará el número) hasta que el número sea divisible por 6.
while ($number % 6 != 0) {
$number++;
}
Suponiendo que $foo
es un número entero:
$answer = (int) (floor(($foo + 5) / 6) * 6)
Use el operador modulus % (módulo)
if ($x % 6 == 0) return 1;
function nearest_multiple_of_6($x) {
if ($x % 6 == 0) return $x;
return (($x / 6) + 1) * 6;
}
Veo algunas de las otras respuestas llamando al módulo dos veces.
Mi preferencia es no pedirle a php que haga lo mismo más de una vez. Por esta razón, guardo en caché el resto.
Otros desarrolladores pueden preferir no generar la variable global adicional o tener otras justificaciones para usar el operador de módulo dos veces.
Código: ( Demo )
$factor = 6;
for($x = 0; $x < 10; ++$x){ // battery of 10 tests
$number = rand( 0 , 100 );
echo "Number: $number Becomes: ";
if( $remainder = $number % $factor ) { // if not zero
$number += $factor - $remainder; // use cached $remainder instead of calculating again
}
echo "$number/n";
}
Posible salida:
Number: 80 Becomes: 84
Number: 57 Becomes: 60
Number: 94 Becomes: 96
Number: 48 Becomes: 48
Number: 80 Becomes: 84
Number: 36 Becomes: 36
Number: 17 Becomes: 18
Number: 41 Becomes: 42
Number: 3 Becomes: 6
Number: 64 Becomes: 66
$num += (6-$num%6)%6;
no hay necesidad de un ciclo while! Módulo (%) devuelve el resto de una división. IE 20% 6 = 2. 6-2 = 4. 20 + 4 = 24. 24 es divisible por 6.
if ($variable % 6 == 0) {
echo ''This number is divisible by 6.'';
}:
Haz divisible por 6:
$variable += (6 - ($variable % 6)) % 6; // faster than while for large divisors
if($number %6 != 0) {
$number += 6 - ($number % 6);
}
El operador de modulus da el resto de la división, por lo que $ number% 6 es la cantidad restante cuando se divide por 6. Esto será más rápido que hacer un ciclo y volver a verificar continuamente.
Si la disminución es aceptable, esto es aún más rápido:
$number -= $number % 6;
result = initial number + (6 - initial number % 6)