Я хотел бы выяснить, является ли одно действительное число множеством другого. Я использую BC-Math, потому что код является частью более крупной системы, выполняющей вычисления цены, а использование значений с плавающей запятой приводит к неверным результатам при множественных вычислениях из-за поведения математики с плавающей запятой.
BC-Math имеет bcmod()
чтобы получить модуль произвольной точности числа. Однако до PHP 7.2 эта функция не работала с нецелыми числовыми строками. Например:
echo bcmod('10', '9.2'); // 1, because '9.2' is truncated to '9'
Преобразование чисел обратно в число с плавающей точкой и использование fmod()
не вариант, так как Функция fmod возвращает неверный результат
Я не мог найти решение этой проблемы, но я не могу представить, что решения нет.
РЕДАКТИРОВАТЬ:
Привет читатель в будущем, который сталкивается с той же проблемой! Основываясь на ответе @ chiliNUT, я создал выдвижная запрос для BCMath-продлен библиотека.
Я думаю, что это можно сделать с помощью математики:
Вы можете связать mod(a,b)
в a
а также b
с этим уравнением:
a = b * floor(a/b) + mod(a,b)
а затем решить это уравнение для мода, чтобы дать
mod(a,b) = a - b * floor(a/b)
Подставляя свои номера, вы получаете
mod(10,9.2) = 10 - 9.2 * floor(10/9.2) = 0.8
Также см. Здесь для реализации bcmath floor: Как потолочные, напольные и круглые номера bcmath?
Других решений пока нет …