vérifier si un nombre est divisible par 6 PHP

je veux vérifier si un nombre est divisible par 6 et, si non, j'ai besoin de l'augmenter jusqu'à ce qu'il devient divisible.

comment puis-je le faire ?

44
demandé sur mickmackusa 2010-01-19 04:29:02

11 réponses

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

module l'opérateur donne le reste de la division, donc $nombre % 6 est le montant restant lors de la division par 6. Ce sera plus rapide que de faire une boucle et de vérifier continuellement.

si décroissant est acceptable alors c'est encore plus rapide:

$number -= $number % 6;
107
répondu ZoFreX 2018-04-10 10:49:56
if ($variable % 6 == 0) {
    echo 'This number is divisible by 6.';
}:

Faire divisible par 6:

$variable += (6 - ($variable % 6)) % 6; // faster than while for large divisors
18
répondu Bandi-T 2010-01-19 01:35:24
$num += (6-$num%6)%6;

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

6
répondu Ponkadoodle 2010-01-19 01:41:50

vous pouvez diviser votre nombre par 6, puis ceil, et de le multiplier de nouveau:

$answer = ceil($foo / 6) * 6;
5
répondu zneak 2010-01-19 01:41:45

Mod % (module) de l'opérateur

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


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

    return (($x / 6) + 1) * 6;
}
2
répondu Mitch Wheat 2010-01-19 01:31:13

je vois d'autres réponses appelant le modulo deux fois.

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

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

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
répondu mickmackusa 2018-01-29 03:08:01

lancez simplement une boucle while qui va continuer à boucler (et augmenter le nombre) jusqu'à ce que le nombre soit divisible par 6.

while ($number % 6 != 0) {
    $number++;
}
1
répondu James Simpson 2010-01-19 01:32:04

en Supposant que $foo est un entier:

$answer = (int) (floor(($foo + 5) / 6) * 6)
1
répondu martinr 2012-08-27 09:50:52
if ($num % 6 != 0)
    $num += 6 - $num % 6;

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

0
répondu Chris Jester-Young 2010-01-19 01:34:37