浮動小数点の計算は正確にならない。
よって、大前提として浮動小数点の計算は避けた方が良いが、必要な時はbcmath関数を利用するとよい。
ただし、bcmath関数を別途インストールしせねば使えない。
すでに仕込んであればDockerのDockerfileに記述がある。
mbstring zip bcmath
// 加算したい小数点を「文字列として」記述し、最後のパラメータで表示させた桁数を指定
$num = bcadd('0.1', '0.2', 1);
var_dump($num); // string(3) "0.3"
echo PHP_EOL;
var_dump((float) $num === 0.3); // bool(true)
一つ目の出力: 0.3と表示される。数値ではなく文字列にしているのに計算ができるのがbcmath関数の機能となる。ただし、文字列になっているため、結果を浮動小数点に戻したければ二つ目の出力にもあるように、float化せねばならない。
二つ目の出力: 今度は 足し算した $num と 0.3 という浮動小数点とを比較し、真偽値で返すもの。
float化しているので浮動小数点同士の比較がしっかりとできている。