57

数値が6で割り切れるかどうかを確認したいのですが、割り切れない場合は、割り切れるまで増やす必要があります。

どうやってやるの ?

4

11 に答える 11

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

モジュラス演算子は除算の余りを与えるので、$ number%6は、6で除算したときに残っている量です。これは、ループを実行して継続的に再チェックするよりも高速です。

減少が許容できる場合、これはさらに高速です。

$number -= $number % 6;
于 2010-01-19T01:35:27.303 に答える
26
if ($variable % 6 == 0) {
    echo 'This number is divisible by 6.';
}:

6で割り切れる:

$variable += (6 - ($variable % 6)) % 6; // faster than while for large divisors
于 2010-01-19T01:35:24.603 に答える
6
$num += (6-$num%6)%6;

whileループは必要ありません!モジュロ(%)は、除算の余りを返します。IE 20%6 = 2. 6-2 = 4. 20 + 4 =24.24は6で割り切れます。

于 2010-01-19T01:35:09.083 に答える
4

では、次の6の倍数が必要ですか?

あなたはあなたの数を6で割り、それからceilそれを割り、そしてそれを再び掛けることができます:

$answer = ceil($foo / 6) * 6;
于 2010-01-19T01:31:52.727 に答える
3

他のいくつかの答えがモジュロを2回呼び出しているのがわかります。

私の好みは、phpに同じことを2回以上行うように依頼しないことです。このため、残りをキャッシュします。

他の開発者は、余分なグローバル変数を生成しないことを好む場合や、モジュロ演算子を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
于 2018-01-29T02:42:59.463 に答える
2

Mod%(モジュラス)演算子を使用する

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


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

    return (($x / 6) + 1) * 6;
}
于 2010-01-19T01:31:13.893 に答える
1

数が6で割り切れるまでループし続ける(そして数を増やす)whileループを実行するだけです。

while ($number % 6 != 0) {
    $number++;
}
于 2010-01-19T01:32:04.877 に答える
1

$foo整数であると仮定します。

$answer = (int) (floor(($foo + 5) / 6) * 6)
于 2010-01-19T01:46:14.547 に答える
0

マイクロ最適化フリークの場合:

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

より多くの評価が%ありますが、分岐/ループは少なくなります。:-P

于 2010-01-19T01:34:37.213 に答える
0

モジュラス演算子を使用してみませんか?

これを試して:

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

それともこれはあなたが意味したことですか?

<?

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

 if($k !=0)    $s=$s+6-$k;
?>
于 2010-01-19T01:35:13.790 に答える
-1
result = initial number + (6 - initial number % 6)
于 2010-01-19T01:36:31.327 に答える