Я пытаюсь установить дельта, мне нужно, когда вы делаете float-сравнение в PHP. Я хочу более внимательно рассмотреть мои переменные, чтобы увидеть разницу.
У меня есть 2 вычисленных переменных, $ a, $ b.
$a = some_function(); $b = some_other_function();
Как я могу увидеть точное число, которое использует PHP?
Я хочу сравнить их с этой формулой, где мне нужно указать дельта:
$delta = 0.00001; if (abs($a-$b) < $delta) { echo "identical"; }
var_dump ($ a, $ b) возвращает 1.6215; 1,6215. но я знаю, что они не совсем равны, потому что
var_dump($a === $b);
оценивает значение false;
Почему var_dump()
выводит внутреннее значение?
В PHP печатные значения чисел с плавающей запятой зависят от «точности» конфигурации PHP.
Вы можете изменить это с помощью:
ini_set('precision', YOUR_DESIRED_PRECISION_AS_INTEGER);
Например, с помощью:
ini_set('precision', 18);
Ваши номера могут отображаться примерно так:
float 1.62149999999999994
float 1.6214999999999995
Так что теперь разница между ними более ясна.
Таким образом, ваша дельта может быть: $ delta = 0.00000000000001; Это действительно зависит от точности, которую вы ищете.
Если вам нужно делать точные математические вычисления, посмотрите на математические функции BC.
Ссылки / Источники
PHP – числа с плавающей точкой
PHP – Числа с плавающей запятой – Внесенные пользователем примечания – демиевые линии в сети deminy dot
Codepad
Если вы не хотите редактировать файл конфигурации … вы можете использовать round(val, precision)
в some_function()
и some_other_function()
. Таким образом, вы можете вернуть результаты в нужную вам точность. Проверьте:
http://php.net/manual/en/function.round.php