こんにちは、円周率小数点以下50桁までならなんとか覚えている tomita です。 さて、割と有名な話なんですが、以下のPHPコードを実行すると出力はどうなるでしょうか。 <?php $num = (0.1 + 0.7) * 10; echo floor($num); // 小数点以下切捨て処理 答えは実行してもらえばわかりますが、7 になります。本来であれば 8 になってほしいところですが、なぜこうなってしまうのでしょうか。 理由はちゃんとPHPマニュアルにも書いてあります。 http://jp2.php.net/manual/ja/language.types.float.php PHPに限った話ではないですが、少数を内部的な二進数表現に変換すると、どうしても有効桁数と丸め方で誤差が出てしまうのです。 ためしに sprintf を使って (0.1 + 0.7) * 10 を 小数点以下