Я читаю данные из текстового файла и выполняю некоторые базовые математические операции. Вот как все должно работать:
// 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?
Вы хотите бросить, чтобы плавать (или использовать 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
для нуля.
напечатанный материал $divisor
держаться на плаву: $divisor = (float)'0.0';
Приведите его к int;
$divisor = (int) '0.0';
Я думаю, что частное должно быть равно нулю, если делитель равен нулю.
Таким образом, вы получите результат в следующих операциях вместо N / A.
Я всегда решаю это так:
$quotient = ($divisor == 0) ? 0 : ($divident/$divisor);
это должно работать для "0.0"
, тоже.