У меня есть скрипт, который делает некоторые математические и делает лист Excel, но я случайно получаю
Warning: Division by zero in myfile.php on line 170
Что сбрасывает мои изменения header () .. Я говорю, что это случайно, потому что это будет работать один раз, но если я обновлю страницу, это нарушит, самая запутанная часть состоит в том, что у меня также есть проверка, является ли его ноль здесь кодом
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-----
Затем я добавляю это как ответ:
Это может быть связано с тем, что значение равно NULL, которое, на самом деле, не> 0. Но это все равно даст вам эту ошибку
Я замечаю, что место, где он ломается, это когда $ cartonCount равен «0.06». Я подозреваю, что $ cartonCount хранится в виде строки, возможно, в европейском стиле 0,06 десятичной записи. Когда PHP пытается преобразовать это в число, он видит его как ноль. Я не уверен, почему он действует по-другому для оператора по модулю, а не для проверки деления или равенства, но ставит $cartonCount = intval($cartonCount)
перед строкой 167 все должно действовать последовательно (хотя это может привести к тому, что ваш 0,06 будет интерпретирован как ноль).
Оператор по модулю преобразует (или округляет) второе число в целое число. 0,06 приводит к 0, что создает предупреждение.
Возможные варианты: например, приведение к integer или round () перед проверкой> 0, округление с использованием ceil () или проверка> 1.
Исходя из контекста, ceil () кажется лучшим вариантом.