PHPの剰余で浮動小数点数を扱う場合の注意

プログラミングで % は剰余と言って、割り算における「余り」を求めるのに使います。具体的には 10 % 3 で 1 になるわけですが、浮動小数点数が絡む場合は言語によって動作が異なるんですね。

たとえば、Javaだと 10 % 0.3 の結果は 約0.1 です。

  • 厳密にはdouble型の 0.10000000000000037 となります。誤差が出るケースが多いので、金額計算などわずかなずれも許容できない場合にはBigDecimalクラス(java.sun.com) を使ったりします。

PHPだと、

剰余演算子は、まず両方のオペランドを整数に直し (小数点以下を切り捨てます) てから処理を行います。

PHP: 代数演算子 - Manual(www.php.net)

だそうで。同じく 10 % 0.3 を行うと、 0.3 を 0 に変換するため、ゼロ除算でエラーになります。fmod関数(www.php.net) を使うのがよいのでしょうか。