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

计算不准确(舍入?)-PHP,php,formula,rounding-error,arithmetic-expressions,Php,Formula,Rounding Error,Arithmetic Expressions,编辑:问题解决了 我正在尝试将一个流行的评级算法移植到一个PHP脚本中,该算法分析了一些来自反击比赛的统计数据。该系统的概要可在以下链接(新闻帖子的底部)中找到: 不管怎么说,我已经用PHP设置好了所有内容,并且我相当确信所有内容都是正确的。为了计算的目的,假设: $rating1K = 5; $rating2K = 8; $rating3K = 3; $rating4K = 0; $rating5K = 0; $kills = 30 $deaths = 19 $round = 30 这是我

编辑:问题解决了

我正在尝试将一个流行的评级算法移植到一个PHP脚本中,该算法分析了一些来自反击比赛的统计数据。该系统的概要可在以下链接(新闻帖子的底部)中找到:

不管怎么说,我已经用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,而如果我自己手动计算它们,它们就不同了。例如,如果我自己计算$killating,我得到1.5789-etc,但PHP返回“1”

我该怎么做才能解决这个问题


非常感谢。

确保您处理的是
浮点数
,而不是
整数
。试着铸造它们。

你计算错了

$kpr = $kills / $round; // kills per round
$killRating = ($kills / $round / $kpr); 
相等于

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

相等于

$kpr = 30 / 30; // 1
$killRating = (30 / 30 / 1); //1
$spr = (30 - 19) / 30; // 0.36666
$survivalRating = (30 - 19) / 30 / 0.3666; // 1
你自己的计算是错误的。PHP在这里做得很好

请注意,kpr为$kill/$round,当您设置$kill/$round/$kpr时,它将始终为1。任何数字除以自身等于1。我不能相信每个人都在谈论浮点数和整数而连数学都不懂

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

$kpr = $kills / $round; // kills per round
$killRating = ($kills / $round / $kpr);
对于KPR:kills/round=30/30=1

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


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

您还可以检查PHP.ini,查看整数使用的精度。。。提高此值可能会有所帮助。哈哈,我甚至没有检查我答案中的数学:)谢谢戴,一开始我完全忽略了这一点。结果是我误解了公式布局,并错误地复制了它。我自己的错,在这里发布之前没有仔细检查。我现在明白了。你是对的。我刚刚意识到我用了19发子弹而不是30发。多么可怕的疏忽啊。我在移植它时从来没有研究过实际的公式,只是假设它是正确的,因为它已经在反恐社区使用了好几年了。当我在代码中编写它时,也许我在解释它时出错了。。。还是评级公式非常不正确?经过几分钟的逻辑思考,我真的意识到这个问题有多么愚蠢。我通过修正公式本身解决了这个问题。谢谢你的帮助,将来我一定会更加小心,然后再发一个问题-_-这与理解数学无关,而是与假设有关。人们每天都会做出糟糕的假设,比如假设那些花时间给出答案的人无法理解十进制除法。