<?php
echo gettype ( 5.00 ); // return double
echo gettype((5)); // return integer
echo gettype(((167.00-158.65)/167.00*100)); // return double
echo floor(5.00); // return 5
echo floor(5); // return 5
echo ((167.00-158.65)/167.00*100); // return 5
echo floor(((167.00-158.65)/167.00*100)); // return 4var_dump(5.00); // return float(5)
var_dump(5); // return int(5)
var_dump((167.00-158.65)/167.00*100); // return float(5)
var_dump(intval(5)); // return int(5)
var_dump(intval((167.00-158.65)/167.00*100)); // return int(4)
echo gettype(intval(((167.00-158.65)/167.00*100))); // return integer
echo floor(intval((167.00-158.65)/167.00*100)); // return 4
?>
Почему функция пола в php не работает в последнем случае?
Как получить 5
из последнего заявления?
Есть ли какая-либо другая функция или метод в php, чтобы получить точное наименьшее количество?
Такое поведение вызвано ограниченной точностью чисел с плавающей точкой. Последний случай имеет тип float
(проверьте это с var_dump
), а в руководстве написано:
Предупреждение
Числа с плавающей точкой имеют ограниченную точность. Хотя это зависит от
В системе PHP обычно используется формат двойной точности IEEE 754,
что даст максимальную относительную погрешность из-за округления в порядке
1.11e-16. Не элементарные арифметические операции могут дать больше
ошибки, и, конечно же, распространение ошибок следует учитывать, когда
несколько операций составлены.Кроме того, рациональные числа, которые точно представимы как
Числа с плавающей запятой в базе 10, такие как 0,1 или 0,7, не имеют
точное представление в виде чисел с плавающей точкой в базе 2, которая
используется внутри, независимо от размера мантиссы. Следовательно, они
не могут быть преобразованы в их внутренние двоичные аналоги без
небольшая потеря точности. Это может привести к запутанным результатам: за
Например, floor ((0.1 + 0.7) * 10) обычно возвращает 7 вместо
ожидается 8, так как внутреннее представление будет что-то вроде
+7,9999999999999991118 ….
Источник:
значение floor () округляется до следующего младшего целого числа. Возвращаемое значение floor () по-прежнему имеет тип float, потому что диапазон значений float обычно больше целого. Эта функция возвращает FALSE в случае ошибки (например, передача массива).
<?php
echo floor(4.3); // 4
echo floor(9.999); // 9
echo floor(-3.14); // -4
?>