У меня есть метод, который возвращает плавание как 1,234567890. Я хочу протестировать это, это действительно делает так. Однако кажется, что это возвращенное плавание имеет другую точность на различных платформах поэтому, как я утверждаю, что возвращенное значение 1.23456789? Если я просто делаю:
$this->assertEqual(1.23456789, $float);
Тогда это могло бы перестать работать на некоторых платформах, где существует недостаточно точности.
В общем, плохая идея - тестировать встроенные поплавки на равенство. Из-за проблем точности представления с плавающей точкой результаты двух различных вычислений могут быть совершенно одинаковыми математически, но разными при их сравнении во время выполнения PHP.
Решение 1: сравнить, насколько они далеки друг от друга. Скажем, если абсолютная разница меньше 0.000001, то значения будут считаться равными.
Решение 2: используйте произвольную математику точности, которая поддерживает числа любого размера и точности, представленные в виде строк.
.Альтернативой использованию bcmath() также может быть установка точности по умолчанию, например:
ini_set('precision', 14);