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 ?
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;
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
$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.
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;
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
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;
}
En supposant que $foo
est un entier:
$answer = (int) (floor(($foo + 5) / 6) * 6)
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++;
}
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;
?>
Pour les amateurs de micro-optimisation:
if ($num % 6 != 0)
$num += 6 - $num % 6;
Plus d'évaluations de %
, mais moins de ramifications/boucles. :-P