2017-08-23 137 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%。如果你想在结果中获得相同的精确度,没有其他办法 –