Question

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

comment puis-je faire?

Était-ce utile?

La solution

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

Le opérateur module donne le reste de la division, de sorte que $ 6% numéro est le montant qui reste en divisant par 6. Ce sera plus rapide que de faire une boucle et revérifier continuellement.

Si la baisse est acceptable, ce qui est encore plus rapide:

$number -= $number % 6;

Autres conseils

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
$num += (6-$num%6)%6;

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

Vous voulez que le multiple de 6, est-ce pas?

Vous pouvez diviser votre numéro de 6, puis ceil il et le multiplier à nouveau:

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

Utilisez la Mod % opérateur (module)

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


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

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

Je vois quelques-unes des autres réponses qui appellent le modulo deux fois.

Je préfère ne pas demander php pour faire la même chose plus d'une fois. Pour cette raison, je en cache le reste.

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

Code: ( 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";
}

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

Il suffit de lancer une boucle while qui continuera à boucle (et augmenter le nombre) jusqu'à ce que le nombre est divisible par 6.

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

En supposant $foo est un nombre entier:

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

Pour les passionnés de micro-optimisation:

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

Plus d'évaluations de %, mais moins de branchement / boucle. :-P

Pourquoi ne pas utiliser le opérateur Modulus ?

Essayez ceci:

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

Ou est-ce que vous vouliez dire?

<?

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

 if($k !=0)    $s=$s+6-$k;
?>
result = initial number + (6 - initial number % 6)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top