我正在尝试创建一个传递 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) 它返回float(374.839284)
- 这些操作是三的规则,其中$value乘以
100
并除以$cantidad
。 - 我正在使用
round()
,因为我使用 ProgressBar 表示百分比,我必须向其传递一个整数。
我确信问题来自数字,这些数字是用不正确的格式或类似的东西获得的,因为正如我所提到的,只需更改(float)$row['total']
为一个数字就可以完美地工作。
如果您使用 $row['total'] 而不将其作为参数传递,则应在其他地方将其声明为全局。最正确的做法是将总数作为函数的参数传递
或者您将您的行声明为全局(绝对不推荐)
并且调用它的函数也将 $rows 作为全局变量。
最终,您还可以将行作为参数传递
您的代码应该向您发出警告,说明 $rows 变量未按方式定义...请按照解释器的提示进行操作。