2015-06-17 3 views
0
$x = array(
    "0", 
    "1689.60", 
    "0.00", 
    "-200", 
    "432.00", 
    "33.60" 
); 

$v = 0; 

foreach($x as $p) { 
    $v += $p; 
} 

if($v == 1955.2) { 
    echo 'equal'; 
} 

с этим простым скриптом Я предположил, что он выведет «равный», но это не так.Ошибка сравнения значений с плавающей запятой

Если я изменил значение -200 на -100 и изменил ожидаемое значение результата на значение 2055.2, он будет работать нормально. Я уже решил свою проблему, набрав $ v в строке, но я просто хочу узнать, почему это не сработало, если это числовое (целое или плавающее).

+0

Вы случайно выбрали значение v как целое число после того, как вы суммировали числа для проверки ошибок? Не могли бы вы рассказать мне, какой результат был, если бы вы это сделали? – lmcphers

+0

Да, значение v равно 1955.2, а при var_dump тип float. значение и тип те же, но возвращают false в условном выражении. попробовал его на версии 5.3 и 5.5 php. – user1035079

+0

Используя ваш пример, попробуйте это, если проверите и скажите мне, соответствует ли он эхо « ' if ($ v - 1955.2 <= 0.001) {echo 'equal'; } ' – lmcphers

ответ

1

http://php.net/manual/en/language.types.float.php

Проблема здесь ваши плавающие значения, даже если они кажутся очень равными, не из-за того, как PHP (и сам компьютер) представляют с плавающей запятой целых чисел. В комментариях к источнику есть несколько решений для тестирования float для равенства. Я настоятельно рекомендую пройти через этот источник; это краткое и информативное.

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