PHP и утверждения поблочного тестирования с десятичными числами

У меня есть метод, который возвращает плавание как 1,234567890. Я хочу протестировать это, это действительно делает так. Однако кажется, что это возвращенное плавание имеет другую точность на различных платформах поэтому, как я утверждаю, что возвращенное значение 1.23456789? Если я просто делаю:

$this->assertEqual(1.23456789, $float);

Тогда это могло бы перестать работать на некоторых платформах, где существует недостаточно точности.

26
задан Gordon 26 December 2009 в 10:59
поделиться

3 ответа

Для большей точности можно использовать BCMath.

.
4
ответ дан 28 November 2019 в 06:35
поделиться

В общем, плохая идея - тестировать встроенные поплавки на равенство. Из-за проблем точности представления с плавающей точкой результаты двух различных вычислений могут быть совершенно одинаковыми математически, но разными при их сравнении во время выполнения PHP.

Решение 1: сравнить, насколько они далеки друг от друга. Скажем, если абсолютная разница меньше 0.000001, то значения будут считаться равными.

Решение 2: используйте произвольную математику точности, которая поддерживает числа любого размера и точности, представленные в виде строк.

.
3
ответ дан 28 November 2019 в 06:35
поделиться

Альтернативой использованию bcmath() также может быть установка точности по умолчанию, например:

ini_set('precision', 14);
0
ответ дан 28 November 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: