2013-07-02 2 views
1

Я столкнулся с этой ситуацией, возможно, логической ошибкой в ​​коде.! Empty() result true для значения 0.0000

Это мой код

foreach ($options as $option) { 

if (($option['max_value'] > 0) && $total_value <= $option['max_value']) { 
     $selected_options[] = $option['option_id']; 
     continue; 
    } 
    if (($option['min_value'] > 0) && $total_value >= $option['min_value']) { 
     $selected_options[] = $option['option_id']; 
    } 
} 

Это прекрасно работает. Но если я заменить (это то, что я делал раньше, поэтому логическая ошибка)

if(($option['min_value'] > 0) .....) with 

if(!empty($option['min_value']) ....) same for checking max_value. 

Но вопрос только во время проверки min_value

Его лечение 0.0000 быть не пустым поэтому я не получают ожидаемый результат. Может кто-нибудь, пожалуйста, объясните мне, что случилось?

$ опции значения, поступающие из базы данных, у меня есть 2 строки

  1. min_value = 0,0000 max_value = 20,0000

  2. min_value = 21,0000 max_value = 0.0000

Спасибо !!

Спасибо всем! Его урок узнал !!!

+0

Что такое 'echo gettype ($ option ['min_value']);' print? 'double' или' string'? – VolkerK

+0

О! Он говорит, что String !! Почему это?? Поле моей базы данных DECIMAL (15, 4). – Razor

+0

Зависит от API, используемого для передачи данных из базы данных и в нее. – VolkerK

ответ

3

Вы должны прочитать инструкцию о empty

0.0000 не является числом это строка.

+0

. 0.00000 может быть двойным, но поскольку источником является база данных, это может быть строка, которая объясняет поведение его поплавкового кода – VolkerK

+0

. Я прочитал документацию. Он говорит, что 0, представленный в float, также равен 0. – Razor

+1

'' 0'', но не '' 0.0000'' – sectus

0

if(!empty($option['min_value']) ....) определенно будет относиться к нему как к неперемасшенному.

В соответствии с руководством empty() определяет, считается ли переменная пустой. Переменная считается пустой, если она не существует или ее значение равно FALSE.

0.0000 - это последовательность символов, которая не может считаться пустой.

0

потому что значение в переменной извлекается из базы данных, поэтому значение будет рассматриваться как строка. И empty() вернет true, только если значение в переменной равно 0.0 (float/numeric) или 0 (числовое) или «0» (строка) , поэтому «0.0» (string) будет возвращено как false.

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