phpでfloat型の値を比較したい場合はstring型にするとよい
<?php $total = 99.1+0.5+0.3+0.1; var_dump($total); if ($total != 100) { echo "not 100\n"; }
結果
float(100) not 100
例えvar_dumpの結果が100でも100として比較出来ないケースが有る。
参考ページ
float型からint型への変換の際、値が変わってしまい困っています。 - Yahoo!知恵袋
bcmath関数を使うのが良いらしいけど、コンパイル時に指定しなかったため使えない。再コンパイルも面倒だったのでstringに変換したら比較できた。
<?php $total = 99.1+0.5+0.3+0.1; $total = (string)$total; // 追加 var_dump($total); if ($total !== '100') { // string型として比較する echo "not 100\n"; }
結果
string(3) "100"
小さな値を使う場合はキャストではなくsprintfでstring型に変換すること
PHP の float から文字列への型キャスト - エンジニアきまぐれTips