-4

我有这个脚本:

<?php
$result = mysql_query("SELECT * FROM high ORDER BY KC DESC LIMIT 20");

while($row = mysql_fetch_array($result))
{
echo $row['KC'];
echo "<br />";
}
?>

还有这个

<?php
$result = mysql_query("SELECT * FROM high ORDER BY DC DESC LIMIT 20");

while($row = mysql_fetch_array($result))
{
echo $row['DC'];
echo "<br />";
}
?>

我想占卜 DC 和 KC 并希望它显示除法后的值。

例如 DC = 80 和 KC = 30

系统会将 KC 分配到 DC ( 80 / 30 = 2.666666666666667 )

我试过这样做:

<?php
$result = mysql_query("SELECT * FROM high ORDER BY Runecraftlvl DESC LIMIT 20");
while($row = mysql_fetch_array($result))
{
echo $row['kills'] / $row['deaths'];
echo "<br />";
}
?>

它工作得很好,但如果变量 KC 和 DC 都是 0,它会给我这个错误:

警告:第 86 行 /home/justxpp1/public_html/high/highscores.php 中除以零

为什么会这样?

http://gyazo.com/26b3309c8e72d89ccc4cd32f4cdae7cd

4

2 回答 2

1

发生这种情况是因为除以零是未定义的。如果 KC 和 DC 为零,则方程为 0/0,即除以零。

要解决此问题,您只需确保除数(除数)为零。

在您的示例中,如果玩家从未死亡,您将得到除以零。只需检查是否$row['deaths']为零,如果是,则显示适当的符号。在许多情况下,接受被零除以产生无穷大。

于 2013-01-27T19:07:48.440 回答
1

虽然这是一个太基本的问题,但这是一个可能的解决方案。您只需要检查第二个变量,第一个变量即使为 0 也可以:

<?php
$result = mysql_query("SELECT * FROM high ORDER BY Runecraftlvl DESC LIMIT 20");
while($row = mysql_fetch_array($result))
  {
  echo ($row['deaths'] != 0) ? $row['kills'] / $row['deaths'] : '-';
  echo "<br />";
  }
?>

PD,它使用三元运算符

我找到了一篇文章,其中解释了如何按照您的要求进行操作。对于您的特定要求,这也很重要:如何避免 SQL 中的“除以零”错误?

于 2013-01-27T19:11:58.467 回答