by shigemk2

当面は技術的なことしか書かない

浮動小数点数の精度

PHP: 浮動小数点数 - Manual
CPUによってfloatの精度が違うので、小数の桁数を信用してはいけない。

サンプル

<?php
$a = 0.1444444444444444444444444;
$b = 0.1444444444444444444444445;
if($a < $b) print_r('hoge'); // $aと$bはイコールになってしまっている

$a = 0.144444;
$b = 0.144445;

if($a < $b) print_r('homu');

結果

homu

追記 var_dumpをつかうといいですね。

<?php
$a = 0.1444444444444444444444444;
$b = 0.1444444444444444444444445;
var_dump($a < $b);
var_dump($a == $b);

$a = 0.144444;
$b = 0.144445;

var_dump($a < $b);

bool(false)
bool(true)
bool(true)