Почему я получаю INF при делении небольших чисел в PHP

#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>";
  

. вместо ,

Не могу задать комментарий для ответа, но случай решен.