■
=ROUNDUP(2/0.9*1.35, 0)
の結果が Excel だと 3
になるけど、PhpSpreadsheet だと 4
になるので、PhpSpreadsheet のバグを見つけたかと思ったけど単に浮動小数点の誤差だった件。
お仕事で PhpSpreadsheet を使って Excel からデータを取得しているんだけど、どうしても完全再現はできないからたまにおかしくなる時があり、今回も非対応のなにかを使ってしまったのかなーと思っていたら違った。
上の計算を電卓で叩くと 2.999999
になるから最初はなにかのバグかなーと思っていたんだけど、試しにふと psysh で叩いてみると 3.0
になったのでなんか気になり、これ丸められてるのかな?って sprintf 叩いたらビンゴ。
<?php echo 2 / 0.9 * 1.35; // 3.0 echo sprintf('%.40f', 2 / 0.9 * 1.35); // 3.0000000000000004440892098500626161694527
なんかこの sprintf('%.40f')
忘れそうなのでメモっておこう。