Я пытаюсь создать функцию, которая, передавая a , $cantidad
должна возвращать процент этой суммы от общей суммы .$total
function obtenerPorcentaje($cantidad) {
$total = (float)$row['total']; // Obtener total de la base de datos
$porcentaje = ((float)$cantidad * 100) / $total; // Regla de tres
$porcentaje = round($porcentaje, 0); // Quitar los decimales
return $porcentaje;
}
Проблема в том, что он всегда возвращает 0
o INF
(бесконечность), но если вместо (float)$row['total']
я ставлю например: 5000.758294
, то работает.
Чтобы вы могли мне помочь, я все объясню:
$row['total']
- это значение, хранящееся в базе данных в поле FLOAT , и, выполняяvar_dump
эту переменную, я получаю:string(11) "2938.483920"
и используя (float) перед переменной, я получаю:float(2938.483920)
.$cantidad
получает значение, с которым будет рассчитываться процент, и в данном случае это:string(10) "374.839284"
, но с (плавающей точкой) возвращается кfloat(374.839284)
- Операции представляют собой правило трех , где $value умножается и
100
делится на$cantidad
. - Я использую ,
round()
потому что я представляю процент с помощью ProgressBar, которому я должен передать целое число.
Я уверен, что проблема связана с числами , которые получены с неправильным форматом или что-то в этом роде, поскольку, как я уже упоминал, простое изменение (float)$row['total']
на число уже отлично работает .
Если вы используете $row['total'] без передачи его в качестве параметра, его следует объявить глобальным в другом месте. Самым правильным было бы передать итог в качестве параметра вашей функции
или что вы объявляете свои строки глобальными (определенно не рекомендуется)
и что функция, которая вызывает это, также имеет $rows как глобальную.
В конце концов вы также можете передать строки в качестве параметра
Ваш код должен был отправить вам предупреждение о том, что переменная $rows не была определена кстати... следуйте подсказкам интерпретатора.