Почему in_array(1.7, range(0, 2, 0.1)) вернет false?
Почему in_array(1.7, range(0, 2, 0.1)) вернет false?
А in_array(1.7, range(0, 2, 0.01)) вернет true
Либо я чего то не знаю в php либо в математике
php 5.6
windows 10
Числа с плавающей точкой не имеют той точности в двоичном представлении, с которой они визуально выглядят в php в десятичном представлении (даже если указать явно число знаков после запятой). Можно принудительно перевести needle и haystack в строку и попробовать еще раз сравнить.
Есть зарепорченый баг, который описывает эту ситуацию: ссылка
Хотелось бы добавить, что такие числа правильно сравнивать так
abs(a - b) < epsilon
где a, b - это сравниваемые числа
epsilion - возможная погрешность, например, 1e-6
Вы не в математике. а в хранении десятичных чисел чего то не понимаете.
1.7 обычно выглядит как то вроде 1.70000000000000003 или 1.700000000001. Так вот вы сравниваете один вид (1.7) с другим, который в массиве.