PHP警告:除以零

时间:2013-08-23 17:34:18

标签: php divide-by-zero

我正在学习php并构建了一个基于表单的实验计算器(也使用html& POST方法),它将值返回给表。当我输入我的值并单击提交时,计算器正常工作,但是当我第一次运行代码时,我在最后一行上得到两个“除以零”错误。在这里或通过Google搜索时,我似乎无法找到合理的解决方案或解释。您可以向newb提供任何解释,我们将不胜感激。

<?php 

error_reporting(E_ALL ^ E_NOTICE);

//calculate the difference in price

$itemQty = $_POST['num1'];

$itemCost = $_POST['num2'];

$itemSale = $_POST['num3'];

$shipMat = $_POST['num4'];

$diffPrice = $itemSale - $itemCost;

$actual = ($diffPrice - $shipMat) * $itemQty;

$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;

?>

10 个答案:

答案 0 :(得分:8)

您需要将表单处理代码包装在条件中,以便在首次打开页面时不会运行。像这样:

if($_POST['num1'] > 0 && $_POST['num2'] > 0 && $_POST['num3'] > 0 && $_POST['num4'] > 0){

  $itemQty = $_POST['num1'];
  $itemCost = $_POST['num2'];
  $itemSale = $_POST['num3'];
  $shipMat = $_POST['num4'];

  $diffPrice = $itemSale - $itemCost;
  $actual = ($diffPrice - $shipMat) * $itemQty;
  $diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
}

答案 1 :(得分:7)

尝试使用

$var = @($val1 / $val2);

答案 2 :(得分:6)

$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;

$ itemCost和$ itemQty返回null或0,检查它们带来的用户输入代码

还要检查它是否不是空数据添加:

if(!empty($_POST['num1'])){
  itemQty = $_POST['num1'];
}

您可以在变量

中使用之前检查此链接以进行后验证

https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/

答案 3 :(得分:3)

如果未设置变量,那么它为NULL,如果您尝试将某个值除以零,则会得到除以零的错误

答案 4 :(得分:2)

如果仅在第一次运行时显示错误,则可能是因为您尚未发送任何POST数据。在使用POST变量之前,您应该检查它们。未定义,null,空数组,空字符串等都被视为false;当PHP将错误的布尔值自动转换为整数或浮点数时,它变为零。这就是变量发生的情况,它们不会在第一次运行时设置,因此被视为零。

10 / $unsetVariable

变为

10 / 0

底线:检查您的输入是否存在以及在使用它们之前它们是否有效,还可以在您进行本地工作时启用错误报告,因为这样可以节省大量时间。您可以按以下方式启用所有错误报告:error_reporting(E_ALL);

修复您的具体问题:如果您的表单没有输入,请不要进行任何计算;只是显示表格。

答案 5 :(得分:1)

你可以试试这个。你有这个错误,因为我们不能除以'zero' (0)值。所以我们想在计算之前验证。

if($itemCost != 0 && $itemCost != NULL && $itemQty != 0 && $itemQty != NULL){
      $diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
}

我们也可以验证POST数据。参考以下

$itemQty = isset($_POST['num1']) ? $_POST['num1'] : 0;

$itemCost = isset($_POST['num2']) ? $_POST['num2'] : 0;

$itemSale = isset($_POST['num3']) ? $_POST['num3'] : 0;

$shipMat = isset($_POST['num4']) ? $_POST['num4'] : 0;

答案 6 :(得分:1)

当我的除数有0值时

if ($divisor == 0) {
    $divisor = 1;
}

答案 7 :(得分:0)

试试这个

if( isset($itemCost)!='' && isset($itemQty)!='')
{
$diffPricePercent = (($actual * 100) / $itemCost) / $itemQty ;
}
else
{
echo "either of itemCost or itemQty are null ";
}
?>

答案 8 :(得分:0)

这里的很多答案都不适用于(字符串)“0.00”。

试试这个:

if (isset($_POST['num1']) && (float)$_POST['num1'] != 0) {
  ...
}

甚至更严格:

if (isset($_POST['num1']) && is_numeric($_POST['num1']) && (float)$_POST['num1'] != 0) {
  ...
}

答案 9 :(得分:0)

如果期望值可以是 0(因此不需要验证),我这样做是为了让事情变得快速、干净和简单:

$percentage = $sum1 / ($sum2 ?: 1)