当除数为“0.0”时除以零警告

Division by zero warning when divisor is "0.0"

我正在从文本文件中读取数据并执行一些基本数学运算。事情应该是这样的:

// no warning, expected result N/A
$dividend = 100;
$divisor = 0.0;
if (!empty($dividend) && !empty($divisor))
{
    $quotient = $dividend/$divisor;
} else {
    $quotient = 'N/A';
}
echo $quotient;

事情就是这样发生的。

// yeilds division by zero warning
$dividend = 100;
$divisor = '0.0';
if (!empty($dividend) && !empty($divisor))
{
    $quotient = $dividend/$divisor;
} else {
    $quotient = 'N/A';
}
echo $quotient;

当文本文件中的值被读取为“0.0”时,我收到被零除的警告,empty() 将其视为非空,而实际上它是空的。

测试“0.0”实际上是 0 的最佳方法是什么?

类型转换 $divisor 为浮动:$divisor = (float)'0.0';

将其转换为 int;

$divisor = (int) '0.0';

我认为如果除数为零,商应该为零。 因此,您在以下操作中得到的结果是 N/A.

我总是这样解决的:

$quotient = ($divisor == 0) ? 0 : ($divident/$divisor);

它也应该适用于 "0.0"

您需要在条件语句中强制转换为浮动(或使用 floatval())。如果您需要变量中的其他数据,例如尾随文本,这会使您的值保持不变:

$dividend = 100;
$divisor = '0.0';
if ((float)$dividend && (float)$divisor) //both are non-zero
{
    $quotient = $dividend/$divisor;
} else { //one or the other are zero
    $quotient = 'N/A';
}
echo $quotient;

但是考虑只检查 $divisor 是否为零。