Когда я пытаюсь получить остаток, он дает недопустимое значение. Я пытаюсь получить остатки двух десятичных значений, и я получаю
3.4694469519536E-18
Мои ценности
$x=0.1; $y=0.005;
Я попробовал следующее:
echo $ed = fmod(0.1,0.005); OutPut:3.4694469519536E-18
echo $ed = ((floatval(0.1)) % (floatval(0.005)));
Но получать
Warning: Division by zero
Но реальность 0,1 будет делиться на 0,005 в 20 раз. то есть 0.1/0.005 = 20
Эта же функция возвращает правильное значение, когда я использую 10%1 = 0
,
Как я могу получить точный остаток. (Я не сталкиваюсь с той же проблемой в JQuery :))
Проверьте работу вокруг: Подразделение PHP Float Value WorkAround
%
Оператор просто работает с целыми числами, поэтому он усекает ваши числа с плавающей точкой до целых чисел и пытается сделать 0 % 0
, что приводит к делению на ноль.
Единственное, что вы можете использовать, это fmod()
, Проблема, с которой вы здесь сталкиваетесь — это типичная неточность с плавающей запятой (значение «почти» равно нулю) Я хотел бы просто игнорировать значения меньше 10 ^ -15. В PHP нет реальной альтернативы этому.
То, что вы могли бы попытаться сделать, это сделать реальное разделение, а затем, если повезет, следы неточности исчезнут. (лайк round(0.1 / 0.005) === 0.1 / 0.005
)
Других решений пока нет …