PHP - 为什么除法运算会导致循环跳过数据行

问题描述 投票:0回答:1

完全被这个难住了。我有一些代码从数据库中提取行并尝试将它们作为 PHP while() 循环的一部分进行处理。这是基本代码:

$i = 1;
while (list($thisScoreID, $thisClassifier, $thisRAW) = mysqli_fetch_array($r, MYSQLI_NUM)){        
    // Grab the reference time that's relevant to this iteration of the loop
    $thisReference = $referenceArrayL6[$thisClassifier];
    // Calculate a percentage from scratch, using the reference time and RAW score
        $thisPercent = 50.00;
        echo "Line ".$i." of data...", PHP_EOL;
    $i++;

表中有 4529 行数据,当我如图所示运行它(通过命令行)时,它显示正确的行数,即最后一行显示为“数据的第 4529 行...”

但是,我实际上不想对百分比进行硬编码。我想做一个计算,用新的百分比更新旧的百分比。这是我真正想要运行的代码版本:

$i = 1;
while (list($thisScoreID, $thisClassifier, $thisRAW) = mysqli_fetch_array($r, MYSQLI_NUM)){        
    // Grab the reference time that's relevant to this iteration of the loop
    $thisReference = $referenceArrayL6[$thisClassifier];
    // Calculate a percentage from scratch, using the reference time and RAW score
        $thisPercent = (($thisReference / $thisRAW)*100);
        $thisPercent = number_format($thisPercent,3);
        echo "Line ".$i." of data...", PHP_EOL;
    $i++;

令人疯狂的是,这段代码现在跳过了 98 条记录。它返回“数据的第 4431 行...”作为最后一行。这并不是说将硬编码值更改为动态值是一个问题;而是将其更改为动态值。我可以将运算符更改为加法或乘法,效果很好。

当我发现乘法有效时,我尝试用倒数相乘而不是除法,但这也导致了失败。

我发现数据库中的值都不为零,因此它与“除以零”问题无关。

我能找到的唯一线索是这是最近的发展。分数可以追溯到 1999 年,我们最近更改了分数的输入方式。看来,在最后 124 个分数中,有 26 个“工作”和 98 个被跳过。但当我查看这些分数时,它们似乎只是正常的非零数字,就像旧分数一样。

我知道这必须与我们输入分数的方式的变化有关,但由于分数仍然显示为正常的非零数字(并且它们被输入为数字,而不是字符串),我很困惑什么可能会导致此问题。

我在 StackOverflow 和其他网站上进行了大量搜索,但要么我使用了错误的搜索词,要么这不是一个常见问题;我还没找到任何有用的东西。

如有任何帮助,我们将不胜感激。谢谢。

php mysql operators
1个回答
0
投票

@Barmar 建议我打印出变量数据,只是为了确认它们的值。我已经进行了搜索以验证不存在零值,但我没有想到检查 NULL 值。其中一个值结果为 NULL,这导致了被零除的问题。一旦我将该数据标记为不可用并重新运行脚本,一切就都到位了。

© www.soinside.com 2019 - 2024. All rights reserved.