不准确的计算(四舍五入?) - PHP

时间:2012-10-05 11:30:57

标签: php formula rounding-error arithmetic-expressions

编辑:问题已解决

我正在尝试移植一个流行的评级算法,该算法将Counter-Strike匹配的一些统计信息分析为PHP脚本。系统概要可以在下面的链接中找到(新闻帖的底部): http://www.hltv.org/?pageid=242&eventid=0

无论如何,所以我已经在PHP中设置了所有内容,而且我有理由相信一切都是正确的。出于计算目的,假设:

$rating1K = 5;
$rating2K = 8;
$rating3K = 3;
$rating4K = 0;
$rating5K = 0;
$kills = 30
$deaths = 19
$round = 30

这是我的代码:

$kpr = $kills / $round; // kills per round
$killRating = ($kills / $round / $kpr); 

$spr = ($round - $deaths) / $round; // survivals per round
$survivalRating = ($round - $deaths) / $round / $spr;    

$averageRMK = ((1*$rating1K + 4*$rating2K + 9*$rating3K + 16*$rating4K + 25*$rating5K)/$round);
$roundsWithMultipleKillsRating = ((1*$rating1K + 4*$rating2K + 9*$rating3K + 16*$rating4K + 25*$rating5K)/$round/$averageRMK);

$rating = ($killRating + 0.7 * $survivalRating + $roundsWithMultipleKillsRating) / 2.7;
echo $rating; 

问题是$ killRating,$ survivalRating和$ roundsWithMultipleKillsRating似乎总是在PHP脚本中返回1,而如果我自己手动计算它们则不同。例如,如果我自己计算$ killRating,我得到1.5789等,但PHP返回“1”。

我能做些什么来解决这个问题?

非常感谢。

3 个答案:

答案 0 :(得分:2)

你在计算错误...

$kpr = $kills / $round; // kills per round
$killRating = ($kills / $round / $kpr); 

等于

$kpr = 30 / 30; // 1
$killRating = (30 / 30 / 1); //1

$spr = ($round - $deaths) / $round; // survivals per round
$survivalRating = ($round - $deaths) / $round / $spr;

等于

$spr = (30 - 19) / 30; // 0.36666
$survivalRating = (30 - 19) / 30 / 0.3666; // 1

你自己的计算错了。 PHP在这里做的一切都很好。

请注意kpr为$ kill / $ round,当你使用$ kill / $ round / $ kpr时,它总是为1.任何数字除以它等于1.我无法相信每个人都在谈论浮点数和整数甚至没有理解数学...

答案 1 :(得分:1)

$kills = 30;
$deaths = 19;
$round = 30;

$kpr = $kills / $round; // kills per round
$killRating = ($kills / $round / $kpr);

对于KPR:杀/圆= 30/30 = 1

对于KillRating:kills / round / kpr = 30/30/1 = 1(这只是kpr / kpr,为什么?)

PHP给你1作为该部分的答案,因为答案是1。

答案 2 :(得分:0)

确保您正在处理floats而不是integers。尝试投射它们。