投票百分比计算错误

时间:2013-04-23 09:10:08

标签: php math percentage

我已经创建了一个php程序,用户可以在其中投票进行投票,之后,投票结果将只显示百分比,但是我在程序中遇到错误。
我用于百分比计算的代码是<?php echo round(($num_votes / $total_votes) * 100) ?>

现在如果我们谈论一个样本调查结果,假设我们有五个选项 option A - 4 votes
option B - 2 votes
option C - 4 votes
option D - 1 votes
option E - 0 votes
总票数= 11

在这种情况下,生成的百分比结果为
option A - 36%
option B - 18%
option C - 36%
option D - 9%
option E - 0%

但总百分比为99%而不是100%。我想要的是总数应该始终为100%。任何帮助都将受到赞赏 感谢。

4 个答案:

答案 0 :(得分:5)

如果您正在处理四舍五入的数字,您最终可以得到...舍入数字。这些舍入数字的总和将与常规总和不同。你无法改变这一点。如果你坚持,你必须:

  1. 计算舍入数字
  2. 计算总和,如果不是100%,
  3. 循环遍历舍入的数字并决定哪一个应该得到丢失的百分比。
  4. 但是你弄乱了数据。你可能认为你正在清理它,但是你搞砸了。

答案 1 :(得分:1)

这种方式导致~100%,'number_format'是件好事

$a = 4;
$b = 2;
$c = 4;
$d = 1;
$e = 0;
$total = $a + $b + $c + $d + $e;

$arr = array(
    'a' => number_format(($a / $total) * 100, 3),
    'b' => number_format(($b / $total) * 100, 3),
    'c' => number_format(($c / $total) * 100, 3),
    'd' => number_format(($d / $total) * 100, 3),
    'e' => number_format(($e / $total) * 100, 3)
);

foreach ($arr as $answer => $percentage) {
    echo  $answer .': '. $percentage . '<br />';
}


// this will be 100.001 so we format is
echo 'total: '. number_format(array_sum($arr), 2);

答案 2 :(得分:0)

您可以指定圆形小数位后的位数。 例如:圆形(数,2);

答案 3 :(得分:-2)

如果你floor()你会错过一点,那么你可以做任何开箱即用的事情,如果你ceil()你将获得一分。

可以 floor()然后如果然后计算array_sum(),如果不是100则找到min()ceil()