読者です 読者をやめる 読者になる 読者になる

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