我想检查一个数字是否可以被6整除,如果不是,我需要增加它直到它可以被整除。
我该怎么做?
答案 0 :(得分:115)
if ($number % 6 != 0) {
$number += 6 - ($number % 6);
}
modulus运算符给出除法的余数,因此$ number%6是除以6时剩余的数量。这将比循环和连续重新检查更快。
如果减少是可以接受的话,那就更快了:
$number -= $number % 6;
答案 1 :(得分:22)
if ($variable % 6 == 0) {
echo 'This number is divisible by 6.';
}:
可以被6整除:
$variable += (6 - ($variable % 6)) % 6; // faster than while for large divisors
答案 2 :(得分:6)
$num += (6-$num%6)%6;
不需要while循环!模数(%)返回除法的余数。 IE 20%6 = 2. 6-2 = 4. 20 + 4 = 24. 24可被6整除。
答案 3 :(得分:5)
答案 4 :(得分: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;
}
答案 5 :(得分:2)
我看到一些其他的答案两次调用模数。
我的偏好是不要让php多次做同样的事情。出于这个原因,我缓存了剩余部分。
其他开发者可能更愿意不生成额外的全局变量,或者有两次使用模运算符的其他理由。
代码:(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";
}
可能的输出:
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
答案 6 :(得分:1)
只需运行一个while循环,它将继续循环(并增加数字),直到数字可被6整除。
while ($number % 6 != 0) {
$number++;
}
答案 7 :(得分:1)
假设$foo
是一个整数:
$answer = (int) (floor(($foo + 5) / 6) * 6)
答案 8 :(得分:0)
对于微优化怪胎:
if ($num % 6 != 0)
$num += 6 - $num % 6;
%
的更多评估,但分支/循环次数减少。 :-P
答案 9 :(得分:0)
为什么不使用Modulus Operator?
试试这个:
while ($s % 6 != 0) $s++;
或者这就是你的意思吗?
<?
$s= <some_number>;
$k= $s % 6;
if($k !=0) $s=$s+6-$k;
?>
答案 10 :(得分:-1)
result = initial number + (6 - initial number % 6)