2016-12-12 2 views
1
$package_with_fee = $packages_lot_qty * 1.1; 

$total_sum = floatval($total_sum); 
$package_with_fee = floatval($package_with_fee); 


echo "Total sum is $total_sum vs Package with fee cost $package_with_fee"; 
if($total_sum != $package_with_fee) 
{ 

echo "ERROR"; 

} 

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

Total sum is 3300 vs Package with fee cost 3300ERROR 

Я не знаю, почему его неправильно, как PHP переменные 3300, но его просто не соответствует и бросает ошибку. что может пойти не так?

+1

Посмотрите на эту страницу, и вы поймете, в чем проблема: http://floating-point-gui.de/ – Jite

+0

Do 'echo sprintf («%. 20f », $ variable); 'для обоих имен переменных, а затем для чтения: http://stackoverflow.com/q/588004 – Rizier123

+0

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

ответ

-2

Сделайте var_dump для обеих переменных и посмотрите разницу. Есть некоторые незначительные отличия, такие как формат или какой-то другой. Вы также можете посмотреть на floatval http://php.net/manual/en/function.floatval.php

+0

нет видимой разницы при выполнении var_dump по двум переменным –

+0

Привет, это проблема точности с плавающей запятой, как описано здесь http://php.net/manual/en/language.types.float.php. если вы хотите сравнить, пожалуйста, сначала преобразуйте свое значение в целое число, а затем конвертируйте в float ИЛИ вы можете ссылаться на другой метод, который объясняется в приведенных выше ссылках. –

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