「1 – (0.2 + 0.7 + 0.1) = 1.1102230246252E-16」ってなんじゃい(゚Д゚)ゴルァ!

いやマジハマりました……。

健康系のサイトの開発の最中。健康のためにはいろんな数値があるわけですよ、なんか知らんけど。なので、ぜーーーんぶ足しても1に満たなかったら警告だしてね、って。まぁ親切じゃないですか。

でも、ピッタリ1なのに、警告が出る。

-bash-3.2$ php -a
Interactive shell

php > echo 1 - (0.2 + 0.7 + 0.1);
1.1102230246252E-16

深ーーーく調べてみたら、PHPのバグなのね、ってどこぞの外人さんも困ってたようです。

Bug #51518 [Bgs]: should add to zero, but gets 1.1102230246252E-16 instead

Description:
————
Math error for code that should be returning zero, but instead returns 1.1102230246252E-16 on multiple systems using multiple versions of PHP.

苦手な英語で読み進めたんだけど、まぁようするに、「浮動小数点数をちゃんと理解しろ」とのこと。
ハイ、すんませんでした。

//8桁まで監視しときゃ大丈夫だろ!?
$shorten = round($goal - $value, 8);

ってところで急場を凌いてみたんだけど、大丈夫かしらん。

スポンサードリンク