第07回: 数値演算 — 金額バグを防ぐ計算の基本

章: 第1章: 文法の土台

「合計金額が1円ずれる」——原因は演算の順序や切り捨て処理かもしれません

ECサイトや料金計算システムで、端数処理を間違えると請求金額がずれるバグが発生します。四則演算だけでなく、切り捨て・切り上げ・剰余の使い方を正しく理解することが、金額系の品質に直結します。

まずコードを動かしてみる


<?php
$price = 980;
$tax = floor($price * 0.1);
echo $price + $tax;

floor() で小数を切り捨てています。切り上げなら ceil()、四捨五入なら round() を使います。

演算子と丸め関数の比較

演算子/関数 役割
+ - * / 四則演算 10 / 33.333...
% 剰余(余り) 10 % 31
** べき乗 2 ** 8256
floor($n) 切り捨て floor(98.7)98
ceil($n) 切り上げ ceil(98.1)99
round($n) 四捨五入 round(98.5)99
abs($n) 絶対値 abs(-5)5

悪い例(丸め処理なしで計算)


<?php
$price = 980;
echo $price * 1.1; // 1078.0 — 小数が残る可能性がある

良い例(明示的に丸める)


<?php
$price = 980;
$total = (int)floor($price * 1.1); // 1078 — 意図が明確
echo $total;

チェックポイント: 金額計算では必ず丸め処理(floor / ceil / round)を明示しましょう。どの丸め方をするかはビジネスルール次第なので、要件を確認してから実装します。

まとめ & 次のステップ

  • 四則演算は + - * /、剰余は %、べき乗は **
  • 切り捨ては floor()、切り上げは ceil()、四捨五入は round()
  • 金額計算では丸め方をビジネスルールに合わせて選ぶ
  • 整数除算は自動的に float になるので (int) でキャストするとよい
  • abs() で負の値を絶対値に変換できる

次回は 比較演算子を学びます。===== の違いを理解すると、型絡みのバグが一気に減ります。

Related Articles