而不是在函數中計算一個百分比,您可以將所有結果作爲數組傳遞並將其作爲整體進行處理。計算完所有百分比並舍入後,檢查它們是否合計爲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%的總數;
你總結完全達到100%有多重要?你正在處理浮點數,所以不準確性是固有的,通常人們只是將免責聲明放在報告中說「由於四捨五入可能不會給XXX」。 –
你可以嘗試使用'round'而不是'number_format'來查看是否改進了它,但對於所有情況它永遠不會100%準確。 – jeroen
對於我的目的來說,至關重要的是,如果不是每次都能達到100次,那麼總共可以達到100次 – Somk