2017-08-23 139 views
0

我想圓了以下數字:PHP完美四捨五入

Case 1: 
round(((4/6) * 100), 2) . '%'; = 66.67% 
round(((1/6) * 100), 2) . '%'; = 16.67% 
round(((1/6) * 100), 2) . '%'; = 16.67% 

Total % = 66.67 + 16.67 + 16.67 = 100.01% 


Case 2: 
round(((5/11) * 100), 2) . '%'; = 45.45% 
round(((3/11) * 100), 2) . '%'; = 27.27% 
round(((3/11) * 100), 2) . '%'; = 27.27% 

Total % = 45.45 + 27.27 + 27.27 = 99.99% 

誰能告訴我,我怎麼會讓它完美的100%

感謝

+1

切勿舍早在數輪'(((4/6)* 100),2)。 '%';' - 這會消除您需要回到100%的精度。相反,只需在顯示它們時通過'number_format'運行數字 – Scoots

+1

實際上您希望第一種情況下的行爲是什麼?如果最終數字(16.67)減少到16.66?從根本上說,你不能總結你已經取得的數字,並期望他們保持相同的總數。 – iainn

+0

最簡單的方法是計算「100%」與其他百分比之和的最後百分比。 – axiac

回答

1

如果知府100100.00,使用這種情況下:

round(((4/6) * 100), 3); = 66.667 
round(((1/6) * 100), 3); = 16.667 
round(((1/6) * 100), 3); = 16.667 
round(66.667+16.667+16.667, 2); = 100 

echo round(((5/11) * 100), 3); = 45.455 
echo round(((3/11) * 100), 3); = 27.273 
echo round(((3/11) * 100), 3); = 27.273 
echo round(45.455+27.273+27.273, 2); = 100 

你可以讓它mor通過提高圓形精度例如對於double值,使用15而不是3;)。

$a1 = (4/6)*100; 
$b1 = (1/6)*100; 
$c1 = (1/6)*100; 
round($a1, 2); 
round($b1, 2); 
round($c1, 2); 
round($a1+$b1+$c1, 2); 

$a2 = (5/11)*100; 
$b2 = (3/11)*100; 
$c2 = (3/11)*100; 
round($a2, 2); 
round($b2, 2); 
round($c2, 2); 
round($a2+$b2+$c2, 2); 

[PHP Demo]

+0

我希望每個百分比和舍入精度2只。並且所有百分比的計數是100.00% – user2788221

+0

您只能計算上一個值100 - 66.67% - 16.67%。如果你想在結果中獲得相同的精確度,沒有其他辦法 –