2012-09-26 46 views
2

我需要對我的頁面上10個鏈接的點擊次數進行總計,然後找出每個點擊人數的百分比。這很容易劃分,但我如何確保最終獲得100%的回合。在PHP中舍入以實現100%

我想要使用下面的代碼,但擔心可能會出現百分比不符合100%的情況,因爲此功能只是在該時間段後刪除數字。

function percent($num_amount, $num_total) { 
$count1 = $num_amount/$num_total; 
$count2 = $count1 * 100; 
$count = number_format($count2, 0); 
echo $count; 
} 

任何意見將不勝感激。

+3

你總結完全達到100%有多重要?你正在處理浮點數,所以不準確性是固有的,通常人們只是將免責聲明放在報告中說「由於四捨五入可能不會給XXX」。 –

+0

你可以嘗試使用'round'而不是'number_format'來查看是否改進了它,但對於所有情況它永遠不會100%準確。 – jeroen

+0

對於我的目的來說,至關重要的是,如果不是每次都能達到100次,那麼總共可以達到100次 – Somk

回答

3

你想要做的是這樣的。

整個棋盤上的點擊總數,然後將每個數字除以總數。 例如:

1134 
5391 
2374 
2887 

在這種情況下,四個按鈕,總的11786次點擊,因此:

1134/11786 = 0.09621.... 
5391/11786 = 0.45740.... 
2374/11786 = 0.20142.... 
2887/11786 = 0.24495.... 

然後,對於每個分割,圓形的結果爲「兩個小數點」,所以第一個結果:

0.09621.... becomes 0.10 

因爲第三點是5以上時,將保持在0.09,如果第三點低於5.

將所有結果舍入後,將每個結果乘以100,然後將它們相加。 的結束結果將永遠是不過100

應該提醒你,取決於你如何使用每個個體的百分比,當他們周圍,任何結果小於0.05會變成0%,除非你面前保持價值圓因此您可以將其聲明爲小於1的百分比。

0

我想你想用ceil()round()

由於這些是浮點數,所以存在出錯的空間。要小心你如何四捨五入,並確保你不會獨立計算最後剩下的百分比。只需從1或100中減去你所擁有的總數。

確保你不計算方程的兩邊,總和一邊,然後從1或100中減去另一邊,或者你正在處理你的百分比。

2

而不是在函數中計算一個百分比,您可以將所有結果作爲數組傳遞並將其作爲整體進行處理。計算完所有百分比並舍入後,檢查它們是否合計爲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%的總數;