web-dev-qa-db-fra.com

vérifier si un nombre est divisible par 6 PHP

Je veux vérifier si un nombre est divisible par 6 et sinon je dois l'augmenter jusqu'à ce qu'il devienne divisible.

comment puis je faire ça ?

45
Utku Dalmaz
if($number %6 != 0) {
  $number += 6 - ($number % 6);
}

L'opérateur module donne le reste de la division, donc $ number% 6 est le montant restant lors de la division par 6. Cela sera plus rapide que de faire une boucle et de revérifier en permanence.

Si diminuer est acceptable, c'est encore plus rapide:

$number -= $number % 6;
110
ZoFreX
if ($variable % 6 == 0) {
    echo 'This number is divisible by 6.';
}:

Rendre divisible par 6:

$variable += (6 - ($variable % 6)) % 6; // faster than while for large divisors
20
Bandi-T
$num += (6-$num%6)%6;

pas besoin d'une boucle while! Modulo (%) renvoie le reste d'une division. IE 20% 6 = 2. 6-2 = 4. 20 + 4 = 24. 24 est divisible par 6.

6
Ponkadoodle

Donc vous voulez le prochain multiple de 6, c'est ça?

Vous pouvez diviser votre nombre par 6, puis ceil it et le multiplier à nouveau:

$answer = ceil($foo / 6) * 6;
5
zneak

Je vois certaines des autres réponses appeler le modulo à deux reprises.

Ma préférence est de ne pas demander à php de faire la même chose plus d'une fois. Pour cette raison, je cache le reste.

D'autres développeurs peuvent préférer ne pas générer la variable globale supplémentaire ou avoir d'autres justifications pour utiliser deux fois l'opérateur modulo.

Code: ( Démo )

$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";
}

Sortie possible:

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
2
mickmackusa

Utilisez l'opérateur Mod % (modulus)

if ($x % 6 == 0) return 1;


function nearest_multiple_of_6($x) {
    if ($x % 6 == 0) return $x;    

    return (($x / 6) + 1) * 6;
}
2
Mitch Wheat

En supposant que $foo est un entier:

$answer = (int) (floor(($foo + 5) / 6) * 6)
1
martinr

Lancez simplement une boucle while qui continuera à boucler (et augmentera le nombre) jusqu'à ce que le nombre soit divisible par 6.

while ($number % 6 != 0) {
    $number++;
}
1
James Simpson

Pourquoi n'utilisez-vous pas l'opérateur Modulus ?

Essaye ça:

while ($s % 6 != 0) $s++;

Ou est-ce ce que vous vouliez dire?

<?

 $s= <some_number>;
 $k= $s % 6;

 if($k !=0)    $s=$s+6-$k;
?>
0
Prasoon Saurav

Pour les amateurs de micro-optimisation:

if ($num % 6 != 0)
    $num += 6 - $num % 6;

Plus d'évaluations de %, mais moins de ramifications/boucles. :-P

0
Chris Jester-Young