環境
- php:8.1
対象
- floor関数を使って誤差が出てしまった人
原因
以下に記載されていますが、浮動小数点の精度が計算結果に誤差を生じさせるようです。
https://www.php.net/manual/ja/language.types.float.php
Controller.php
$result =floor((0.1+0.7)*10);
echo $result; // 7になる
対応
BC Math 関数を使用して対応します。
Controller.php
$number = (0.1+0.7)*10;
$result = (int)(bcdiv((string)$number, '1', 0));
echo $result; // 正しい結果の8になる