数値が6で割り切れるかどうかを確認し、そうでない場合は割り切れるまで増やす必要があります。
どうやってやるの ?
if ($number % 6 != 0) {
$number += 6 - ($number % 6);
}
modulus 演算子は除算の残りを与えるので、$ number%6は6で除算するときに残った量です。これは、ループを実行して継続的に再チェックするよりも高速です。
減少が許容される場合、これはさらに高速です:
$number -= $number % 6;
if ($variable % 6 == 0) {
echo 'This number is divisible by 6.';
}:
6で割り切れます:
$variable += (6 - ($variable % 6)) % 6; // faster than while for large divisors
$num += (6-$num%6)%6;
whileループは必要ありません!モジュロ(%)は、除算の剰余を返します。 IE 20%6 = 2. 6-2 = 4. 20 + 4 =24。24は6で割り切れます。
モジュロを2回呼び出す他の答えがいくつかあります。
私の好みは、同じことを複数回行うようにphpに依頼しないことです。このため、残りをキャッシュします。
他の開発者は、余分なグローバル変数を生成しないことや、モジュロ演算子を2回使用することを正当化することを好む場合があります。
コード:( デモ )
$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";
}
可能な出力:
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
Mod %(モジュラス)演算子を使用します
if ($x % 6 == 0) return 1;
function nearest_multiple_of_6($x) {
if ($x % 6 == 0) return $x;
return (($x / 6) + 1) * 6;
}
$foo
は整数です:
$answer = (int) (floor(($foo + 5) / 6) * 6)
数が6で割り切れるまでループし続ける(そして数を増やす)whileループを実行します。
while ($number % 6 != 0) {
$number++;
}
モジュラス演算子 を使用しないのはなぜですか?
これを試して:
while ($s % 6 != 0) $s++;
または、これはあなたが意味したものですか?
<?
$s= <some_number>;
$k= $s % 6;
if($k !=0) $s=$s+6-$k;
?>
マイクロ最適化フリークの場合:
if ($num % 6 != 0)
$num += 6 - $num % 6;
%
の評価は増えますが、分岐/ループは少なくなります。 :-P