PHPで割り算のあまりを求める方法について

採用はこちら

PHPで割り算のあまりを求めるには、剰余演算子 % を使います。

剰余とは、割り算をしたときに割り切れずに残る数のことです。

一般的には「あまり」と呼ばれます。

たとえば、103 で割ったときのあまりを求める場合は、次のように書きます。

<?php
echo 10 % 3;
?>

実行結果は次の通りです。

1

10 ÷ 3 は、商が 3、あまりが 1 です。

そのため、10 % 3 の結果は 1 になります。

PHPでは、このように % を使うことで、整数同士の割り算のあまりを簡単に求められます。

目次

剰余演算子「%」の基本

PHPの % は、左側の数を右側の数で割ったときのあまりを返します。

基本的な書き方は、次の通りです。

$a % $b

これは、$a$b で割ったときのあまりを意味します。

たとえば、次のように使います。

<?php
echo 7 % 2;   // 1
echo 8 % 2;   // 0
echo 10 % 4;  // 2
?>

それぞれの計算内容は、次の通りです。

意味結果
7 % 272 で割ったあまり1
8 % 282 で割ったあまり0
10 % 4104 で割ったあまり2

8 % 2 のように割り切れる場合は、あまりがないため結果は 0 になります。

割り切れるかどうかを判定する方法

% は、ある数が別の数で割り切れるかどうかを判定するときにもよく使われます。

割り切れる場合、あまりは 0 になります。

<?php
$num = 10;

if ($num % 2 === 0) {
    echo "割り切れます";
} else {
    echo "割り切れません";
}
?>

実行結果は次の通りです。

割り切れます

10 % 20 です。

つまり、102 で割り切れるため、条件式が真になります。

このように、% の結果が 0 かどうかを見ることで、割り切れるかどうかを判定できます。

偶数・奇数を判定する方法

PHPで偶数か奇数かを判定したい場合は、2 で割ったあまりを調べます。

偶数は 2 で割り切れるため、あまりが 0 になります。

一方、奇数は 2 で割ると、あまりが 1 になります。

<?php
$num = 7;

if ($num % 2 === 0) {
    echo "偶数です";
} else {
    echo "奇数です";
}
?>

実行結果は次の通りです。

奇数です

7 % 2 の結果は 1 です。

そのため、$num % 2 === 0 には当てはまらず、else 側の処理が実行されます。

偶数判定では、次のように書くのが一般的です。

$num % 2 === 0

奇数かどうかを判定したい場合は、次のように書けます。

$num % 2 !== 0

倍数かどうかを判定する方法

ある数が特定の数の倍数かどうかを調べる場合も、% を使います。

たとえば、153 の倍数かどうかを判定する場合は、次のように書きます。

<?php
$num = 15;

if ($num % 3 === 0) {
    echo "3の倍数です";
} else {
    echo "3の倍数ではありません";
}
?>

実行結果は次の通りです。

3の倍数です

15 % 30 です。

つまり、153 で割り切れるため、3 の倍数だと判断できます。

同じ考え方で、5 の倍数かどうかを調べる場合は、次のように書けます。

<?php
$num = 20;

if ($num % 5 === 0) {
    echo "5の倍数です";
}
?>

% は、倍数判定や条件分岐でよく使われる便利な演算子です。

あまりを変数に代入する方法

割り算のあまりは、変数に代入して使うこともできます。

<?php
$remainder = 17 % 5;

echo $remainder;
?>

実行結果は次の通りです。

2

17 ÷ 5 は、商が 3、あまりが 2 です。

そのため、$remainder には 2 が代入されます。

変数同士で計算する場合は、次のように書きます。

<?php
$num1 = 23;
$num2 = 4;

$remainder = $num1 % $num2;

echo $num1 . "を" . $num2 . "で割ったあまりは" . $remainder . "です。";
?>

実行結果は次の通りです。

23を4で割ったあまりは3です。

このように、固定の数値だけでなく、変数を使ってあまりを求めることもできます。

「/」と「%」の違い

PHPでは、割り算の結果を求める場合は / を使い、割り算のあまりを求める場合は % を使います。

<?php
echo 10 / 3;
?>

実行結果は、次のようになります。

3.3333333333333

/ は、通常の割り算の結果を返します。

一方、次のコードは、割り算のあまりを求めます。

<?php
echo 10 % 3;
?>

実行結果は次の通りです。

1

違いを整理すると、次のようになります。

演算子意味結果
/割り算の結果を求める10 / 33.333...
%割り算のあまりを求める10 % 31

通常の割り算の答えが必要な場合は /、あまりだけが必要な場合は % を使います。

小数のあまりを求める場合はfmod関数を使う

PHPの % は、整数の剰余を求める演算子です。

小数を指定した場合、計算前に値が整数へ変換されます。

そのため、小数を含めたあまりを正しく求めたい場合には、% ではなく fmod() 関数を使います。

たとえば、次のコードを見てみましょう。

<?php
echo 10.5 % 3;
?>

この場合、10.5 が整数として扱われるため、実質的には次のような計算になります。

10 % 3

そのため、結果は次のようになります。

1

一方、小数を含めたあまりを求めたい場合は、fmod() を使います。

<?php
echo fmod(10.5, 3);
?>

実行結果は次の通りです。

1.5

10.5 ÷ 3 は、33 回入り、残りが 1.5 です。

そのため、fmod(10.5, 3) の結果は 1.5 になります。

整数のあまりを求める場合は %、小数を含むあまりを求める場合は fmod() を使うと覚えておくとよいでしょう。

fmod関数の基本的な使い方

fmod() は、小数を含む割り算のあまりを求めるための関数です。

基本的な書き方は、次の通りです。

fmod(割られる数, 割る数)

実際のコードでは、次のように使います。

<?php
$result = fmod(7.5, 2);

echo $result;
?>

実行結果は次の通りです。

1.5

7.5 ÷ 2 は、23 回入り、残りが 1.5 になります。

ただし、fmod() は浮動小数点数を扱うため、計算内容によってはごく小さな誤差が出る場合があります。

金額計算など、厳密な小数計算が必要な場面では注意が必要です。

割る数が0の場合はエラーになる

あまりを求める場合も、通常の割り算と同じように、0 で割ることはできません。

次のコードはエラーになります。

<?php
echo 10 % 0;
?>

% の右側、つまり割る数が 0 の場合、PHPでは DivisionByZeroError が発生します。

変数を使って計算する場合は、割る数が 0 でないか事前に確認しておくと安全です。

<?php
$num1 = 10;
$num2 = 0;

if ($num2 !== 0) {
    echo $num1 % $num2;
} else {
    echo "0で割ることはできません";
}
?>

実行結果は次の通りです。

0で割ることはできません

ユーザー入力や外部データを使って計算する場合は、割る数に 0 が入る可能性もあります。

そのため、エラーを防ぐには事前チェックが重要です。

負の数を使う場合の注意点

PHPで % を使う場合、負の数の扱いにも注意が必要です。

PHPの剰余演算では、結果の符号は左側の値、つまり割られる数の符号と同じになります。

たとえば、次のコードを見てみましょう。

<?php
echo -10 % 3;
?>

実行結果は次の通りです。

-1

-10 % 3 の場合、左側の値である -10 が負の数なので、結果も負の値になります。

一方、次のように右側の値が負の数でも、左側の値が正であれば結果は正になります。

<?php
echo 10 % -3;
?>

実行結果は次の通りです。

1

整理すると、次のようになります。

結果
10 % 31
10 % -31
-10 % 3-1
-10 % -3-1

このように、PHPの % では、割る数ではなく、割られる数の符号が結果に影響します。

for文と組み合わせて偶数だけを表示する例

% は、繰り返し処理と組み合わせて使われることも多いです。

たとえば、1 から 10 までの数字のうち、偶数だけを表示する場合は、次のように書けます。

<?php
for ($i = 1; $i <= 10; $i++) {
    if ($i % 2 === 0) {
        echo $i . "<br>";
    }
}
?>

実行結果は次のようになります。

2
4
6
8
10

$i % 2 === 0 によって、$i が偶数かどうかを判定しています。

246810 はすべて 2 で割り切れるため、画面に表示されます。

一定間隔で処理を実行する例

% は、一定の間隔で処理を実行したい場合にも便利です。

たとえば、一覧表示で3件ごとに改行したい場合は、次のように書けます。

<?php
for ($i = 1; $i <= 9; $i++) {
    echo "項目" . $i . " ";

    if ($i % 3 === 0) {
        echo "<br>";
    }
}
?>

出力結果のイメージは、次の通りです。

項目1 項目2 項目3
項目4 項目5 項目6
項目7 項目8 項目9

$i % 3 === 0 は、$i3 の倍数かどうかを判定しています。

369 のタイミングで条件が成立するため、3件ごとに改行できます。

このように、% を使うと、一定回数ごとに処理を切り替えることができます。

偶数行と奇数行でclass名を変える例

Web制作では、リストやテーブルの行ごとにデザインを変えたい場合があります。

たとえば、偶数行と奇数行で異なるclass名を付けたい場合にも、% が使えます。

<?php
for ($i = 1; $i <= 5; $i++) {
    if ($i % 2 === 0) {
        $class = "even";
    } else {
        $class = "odd";
    }

    echo '<div class="' . $class . '">項目' . $i . '</div>';
}
?>

出力されるHTMLは、次のようになります。

<div class="odd">項目1</div>
<div class="even">項目2</div>
<div class="odd">項目3</div>
<div class="even">項目4</div>
<div class="odd">項目5</div>

$i % 2 === 0 で偶数かどうかを判定し、偶数なら even、奇数なら odd というclass名を設定しています。

なお、今回の例では $class$i がコード内で決まっているため大きな問題はありません。

ただし、ユーザー入力や外部データをHTMLに出力する場合は、必要に応じて htmlspecialchars() などでエスケープすることが大切です。

FizzBuzzで剰余演算子を使う例

剰余演算子 % は、プログラミング学習でよく使われるFizzBuzzにも利用できます。

FizzBuzzは、次のルールで数字や文字列を表示する処理です。

条件表示する内容
3と5の両方の倍数FizzBuzz
3の倍数Fizz
5の倍数Buzz
それ以外数字をそのまま表示

PHPでは、次のように書けます。

<?php
for ($i = 1; $i <= 30; $i++) {
    if ($i % 15 === 0) {
        echo "FizzBuzz<br>";
    } elseif ($i % 3 === 0) {
        echo "Fizz<br>";
    } elseif ($i % 5 === 0) {
        echo "Buzz<br>";
    } else {
        echo $i . "<br>";
    }
}
?>

このコードでは、最初に $i % 15 === 0 を判定しています。

35 の両方の倍数は、15 の倍数でもあります。

そのため、FizzBuzz を表示したい場合は、3 の倍数や 5 の倍数よりも先に 15 の倍数を判定する必要があります。

もし先に $i % 3 === 0 を判定してしまうと、1530 のような数も Fizz として処理されてしまいます。

比較するときは「===」を使うと安全

PHPで条件分岐を行う場合、次のように === を使うことがよくあります。

<?php
$num = 8;

if ($num % 2 === 0) {
    echo "偶数です";
}
?>

=== は、値だけでなく型も比較する厳密比較演算子です。

== でも判定できる場合はありますが、PHPでは型の自動変換が行われることがあります。

そのため、意図しない判定を避けるには、基本的に === を使うと安全です。

$num % 2 === 0

このように書くことで、$num % 2 の結果が、数値の 0 と厳密に一致するかどうかを判定できます。

PHPで割り算のあまりを求める方法のまとめ

PHPで割り算のあまりを求めるには、剰余演算子 % を使います。

<?php
echo 10 % 3;
?>

実行結果は次の通りです。

1

% は、左側の数を右側の数で割ったときのあまりを返す演算子です。

基本的な使い方をまとめると、次のようになります。

目的書き方
あまりを求める$a % $b
偶数か判定する$num % 2 === 0
奇数か判定する$num % 2 !== 0
3の倍数か判定する$num % 3 === 0
小数のあまりを求めるfmod($a, $b)
割り算の結果を求める$a / $b

整数同士のあまりを求める場合は % を使います。

小数を含めたあまりを求めたい場合は、fmod() を使います。

また、割る数が 0 の場合は DivisionByZeroError が発生するため、変数を使って計算する場合は、事前に 0 でないか確認しておくことが大切です。

% は、単にあまりを求めるだけでなく、偶数・奇数判定、倍数判定、一定間隔での処理、HTMLのclass切り替えなど、実務でもよく使われます。

PHPの条件分岐や繰り返し処理を理解するうえでも、ぜひ覚えておきたい演算子です。

以上、PHPで割り算のあまりを求める方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次