#php #divide #inf
#php #разделить #inf
Вопрос:
У меня есть две таблицы в базе данных. У каждого есть столбец (varchar255) с небольшим числом (0-30). Я пытаюсь разделить только эти два, и вот результат:
Если в одном столбце число 6,575, а в другом 1,291, уравнение должно быть 5,09. Выводит 6. Other / большинство результатов выводит INF
Числа поступают из цикла foreach из базы данных, и это код с картинки:
echo $row["ton"]." - ".$row_w["weight"]." - ".$row["ton"] / $row_w["weight"]."<br>";
Я пробовал bcdiv, и это ничего не выдает, и is_infinite = 1. Чего мне не хватает?
Комментарии:
1.
3,932 / 0,979
никогда5.09
2. У вас проблема при смешивании конкатентации с математической операцией. Это сработает:
echo $row["ton"]." - ".$row_w["weight"]." - ".($row["ton"] / $row_w["weight"])."<br>";
3. Извините, неправильный номер / опечатка
4. попробуйте преобразовать значения в int ()
5. Запятые в числах отбрасывают это. Вам нужно убрать запятые из чисел или преобразовать их в точки, прежде чем вы сможете их разделить
Ответ №1:
Вам нужно преобразовать значения (строки char) в float, используя floatval, прежде чем выполнять деление.
Inf означает, что результат бесконечен, потому что вы делите на 0 или очень маленькое число в результате неожиданного значения, полученного при работе с символами с плавающей точкой, поскольку программа не способна правильно понимать десятичные дроби.
Пример:
$var = '578.23';
$float_value_of_var = floatval($var);
и ваш код может быть чем-то вроде этого (только в качестве указания):
echo $row["ton"]." - ".$row_w["weight"]." - ".floatval($row["ton"]) / floatval($row_w["weight"])."<br>";
Ответ №2:
Спасибо @aynber / @Ash-b за просмотр моих плохо сохраненных значений.
$a = str_replace(",", ".", $row["ton"]);
$b = str_replace("," ,".", $row_w["weight"]);
echo $row["ton"]." - ".$row_w["weight"]." - ".$a / $b."<br>";
. вместо ,
Не могу задать комментарий для ответа, но случай решен.