【PHP】商と余りを求める方法
更新日:2023/03/23
PHPで商と余りを求める方法をお伝えします。
結果が共に整数の場合
割る数と割られる数が整数で商と余りを整数で求める場合、次のような計算式になります。
商: floor(割られる数 / 割る数) 余り: 割られる数 % 割る数
/ は、割り算をおこなう演算子ですね。
floor()は小数を切り捨てる関数です。
% は、余りを求める演算子です。
次のように使用します。
$divisor = 11;
$dividend = 3;
$quotient = floor( $divisor / $dividend);
$remainder = $divisor % $dividend;
echo "{$divisor}を{$dividend}で割ると商は{$quotient}で余りは{$remainder}です";
divisor → 割る数
dividend → 割られる数
quotient → 商
remainder → 余り
注意しないといけないのは、割り算は割る数に0を指定できません。
PHPは次のような『ゼロ除算エラー』が発生します。
$a = 10 / 0;
// PHP Fatal error: Uncaught DivisionByZeroError: Division by zero in ...
$b = 10 % 2;
// PHP Fatal error: Uncaught DivisionByZeroError: Division by zero in ...
そのため、割られる数が0かどうかの確認が必要です。
商や余りの計算が頻出する場合は、次のようにな関数を作成しておくと便利です。
// 商を求める関数
function quotient($divisor,$dividend,$dividendZeroValue=null){
return $dividend === 0
? $dividendZeroValue
: floor( $divisor / $dividend);
}
// 余りを求める関数
function remainder($divisor,$dividend,$dividendZeroValue=null){
return $dividend === 0
? $dividendZeroValue
: $divisor % $dividend;
}
3番目の引数は、0除算時の戻り値を指定します。
0除算でも続行可能なら、代替の数値を指定しましょう。
桁数を指定して商を小数で求める場合
商を小数で求める場合は、割り算をおこなった後に指定桁数で切り捨てます。
余りは、次の計算式で求めます。
余り: 割る数 - ( 割られる数 * 商 )
以上から次のコードを作成しました。
function quotient_decimal($divisor,$dividend,$number_of_digits,$dividendZeroValue=null){
if( $dividend === 0 ) return $dividendZeroValue;
$multiple = 10 ** $number_of_digits; // 10 の$number_of_digits乗
return floor( ($divisor / $dividend) * $multiple ) / $multiple;
}
// 余りを求める関数
function remainder_decimal($divisor,$dividend,$number_of_digits,$dividendZeroValue=null){
if( $dividend === 0 ) return $dividendZeroValue;
$quotient = quotient_decimal($divisor,$dividend,$number_of_digits,$dividendZeroValue);
return $divisor - ($dividend * $quotient);
}
次のように使用します。
$divisor = 21;
$dividend = 4;
$quotient = quotient_decimal( $divisor, $dividend,1);
$remainder = remainder_decimal($divisor, $dividend,1);
echo "{$divisor}を{$dividend}で割ると商は{$quotient}で余りは{$remainder}です";
// 21を4で割ると商は5.2で余りは0.2です
更新日:2023/03/23
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。