2015-11-20 9 views
0

У меня есть сценарий, который делает некоторые математике и делает лист первенствовать, но я случайно получитьPHP Деление на ноль предупреждения с проверкой

Warning: Division by zero in myfile.php on line 170 

Что скидывает мой заголовок() меняется .. Я говорю, что его случайный, потому что он будет работать один раз, но если я обновить страницу он ломает наиболее запутанная часть является то, что у меня также есть чек, если здесь его нуль код

 167 if($cartonCount > 0){ 
     168  echo "-----" . $cartonCount . "-----"; 
     169 $mellow = $qty/$cartonCount; 
     170 $leftovers = $qty % $cartonCount; 
     171 for($x = 1 ; $x <= $mellow ; $x++){ 

Если количество коробки 0 оно не должно но я все еще получаю предупреждение. Если у кого-нибудь есть идея, дайте мне знать, вот образец

-2.38----------7.63----------12----------10----------7.5---------  
7.5----------4.5----------4.5----------4.5----------4.5----------7.5- 
---------1----------9.5----------7.5----------2.38----------0.06----- 

Warning: Division by zero in /nfs/c08/h02/mnt/122022/domains/superstructs.com/html/catalog/test/samples/upsExport.php on line 170 

-----2.38----------7.63----------7.5----------7.5----------2.38------ 
----0.06----- 
+1

Возможно, это значение равно NULL, которое, по сути, не> 0. Но он все равно даст вам эту ошибку. – durbnpoisn

+0

Кажется, что он работает с if ($ cartonCount> 0 && $ cartonCount! = Null) –

ответ

1

Я заметил, что место, где он ломается, составляет $ cartonCount "0.06". Я подозреваю, что $ cartonCount хранится в виде строки, возможно, в формате десятичного десятичного обозначения в европейском стиле. Когда PHP пытается преобразовать его в число, он видит его как ноль. Я не уверен, почему он действует по-разному для оператора modulo, а не для проверок деления или равенства, но при этом следует положить $cartonCount = intval($cartonCount) до того, как строка 167 будет действовать последовательно (хотя это может привести к интерпретации вашего 0.06 как нуля).

2

Затем я ставлю это в качестве ответа:

Это может быть потому, что значение NULL, которое, по сути, не> 0. Но он все равно даст вам эту ошибку

+1

Моей первой мыслью было и нулевое значение, но NULL> 0 всегда будет возвращать false. – Cuagau

1

Оператор modulo преобразует (или округляет) второе число в целое. 0.06 приводит к 0, что создает предупреждение.

Возможные варианты, например, литье в целое или круглые() до проверки> 0, сгонять с помощью CEIL() или проверки> 1.

Исходя из контекста (потолке), кажется, самый лучший вариант.