您可以将所有结果作为数组传递并作为一个整体进行处理,而不是在函数中计算一个百分比。计算完所有百分比并四舍五入后,检查它们的总和是否为 100。如果不是,则调整最大值以强制它们全部为 100。调整最大值将确保您的结果尽可能少地倾斜。
在进行调整之前,我示例中的数组总计为 100.02。
function percent(array $numbers)
{
$result = array();
$total = array_sum($numbers);
foreach($numbers as $key => $number){
$result[$key] = round(($number/$total) * 100, 2);
}
$sum = array_sum($result);//This is 100.02 with my example array.
if(100 !== $sum){
$maxKeys = array_keys($result, max($result));
$result[$maxKeys[0]] = 100 - ($sum - max($result));
}
return $result;
}
$numbers = array(10.2, 22.36, 50.10, 27.9, 95.67, 3.71, 9.733, 4.6, 33.33, 33.33);
$percentages = percent($numbers);
var_dump($percentages);
var_dump(array_sum($percentages));
输出:-
array (size=10)
0 => float 3.51
1 => float 7.69
2 => float 17.22
3 => float 9.59
4 => float 32.86
5 => float 1.28
6 => float 3.35
7 => float 1.58
8 => float 11.46
9 => float 11.46
float 100
这也适用于作为函数参数的关联数组。密钥将被保留。
这些数字现在可以以表格、图表或图表的形式呈现,并且总能给您 100% 的总和;