2015-10-29 5 views
-1

я получаю неправильный результат при добавлении номера поплавка, пожалуйста скажите мне, как вы программист спасаясь от этогоPHP добавив число с плавающей запятой дает неправильный результат

Код:

$tot = 0; 
    $ans = (float)101; 
    for($i=1; $i<= 10; $i++){ 
     $tot = $tot + 10.1; 
    } 
    var_dump($tot); 
    var_dump($ans); 
    if($tot == $ans){ 
     echo '<br />Both are equal '; 
    } 
    else{ 
     echo '<br />Both are not equal '; 
    } 

Результат:

поплавка 101

поплавок 101

Оба не равны

ответ

1

Эта проблема унаследована от C языка ,

Там будет небольшая разница при сравнении значений плавающей,

См this, анс this

попробовать это,

if (abs(($tot-$ans)/$tot) < 0.00001) { 
    echo '<br />Both are equal '; 
} 
else{ 
    echo '<br />Both are not equal '; 
} 
+0

number_format ($ карапуз , 5) также является решением по крайней мере для этого случая – shanavas

+0

Но shud должен понимать, что плавающие значения не следует сравнивать таким образом. –

+0

Вы имеете в виду, сравниваете как number_format ($ tot, 5)? – shanavas

0

Попробовать «===» , «==» сравнивает ссылки на переменные и «===» сравнивает значение

if($tot === $ans){ 
    echo '<br />Both are equal '; 
} 
else{ 
    echo '<br />Both are not equal '; 
} 
+0

никаких изменений, если я не меняюсь оператор – shanavas

Смежные вопросы