[PHP]割り算(除算)のあれこれ

PHP四則演算

割り算の答えは割り切れるものとそうでないものがあります。

そうでないものとは当然割り切れないものです。

割り切れない場合は答えの表示として一般的には以下の選択肢があります。

  • 余りを出す。
  • 切り上げ
  • 切り捨て
  • 四捨五入

PHPでこれを出す場合、ceil,round,floor等がありますが、いつも分からなくなってしまうのでまとめ。

PHPでの割り算(除算)方法

基本中の基本としてPHPでの割り算には「/」を使用します。

echo 10/2;
// 5

割り切れない場合は以下のように延々と表示されます。

echo 10/3;
// 3.33333333333...

割り切れない値のままだとその後の処理もやりにくかったりすることもあるので、これを切り捨て、切り上げ、四捨五入等の方法を使用して処理します。

ceil – 切り上げ

echo ceil(10.3333);
// 11

ceil ( float $value ) : float

value の次に大きい整数値を返します。

$valueが10.5の場合、その次に大きい整数、11を返します。

floor – 切り捨て

echo floor(10.3333);
// 10

floor ( float $value ) : float

必要に応じて value を丸めることにより、 value をこえない最大の整数の値を (float 型で) 返します。

$valueが、10.5の場合、10が返ります。

round – 特定の小数点桁数で四捨五入

四捨五入と記載しましたが、厳密には違います。

round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] ) : float

3つ目のパラメータにモードを指定することにより(省略可能)、変更できます。

デフォルトでは四捨五入します。(省略した場合)

定数説明
PHP_ROUND_HALF_UPval が小数点第 precision 位の値になるように、 ゼロから離れる方向に丸めます。1.5 は 2 に、そして -1.5 は -2 になります。
PHP_ROUND_HALF_DOWN val が小数点第 precision 位の値になるように、 ゼロに近づく方向に丸めます。1.5 は 1 に、そして -1.5 は -1 になります。
PHP_ROUND_HALF_EVENval が小数点第 precision 位の値になるように、 もっとも近い偶数に丸めます。
PHP_ROUND_HALF_ODD val が小数点第 precision 位の値になるように、 もっとも近い奇数に丸めます。

余りを出す

10÷3=3あまり1

このような回答を出すデフォルトで出すような関数はありません。

この場合、余りが発生するかを確認して発生する場合に特別な処理をします。

余りを確認するには%を使用します。

echo 10%3;
// 1

上記のように10÷3の余り、1が返されます。

ということで余りが0の場合は割り切れる。それ以外は割り切れないと考えます。

$a = int;
$b = int;

if ($a%$b != 0) {
$c = floor($a/$b);
$d = $a%$b;
echo $a. "÷" .$b. "=" .$c. "あまり" .$d;
}
else {
$c = $a%$b;
echo $a. "÷" .$b. "=" .$c;
}

こんな感じでしょうか。

PHP四則演算