Получение по модулю двух действительных чисел с помощью BCMath

Я хотел бы выяснить, является ли одно действительное число множеством другого. Я использую 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-продлен библиотека.

2

Решение

Я думаю, что это можно сделать с помощью математики:

Вы можете связать 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?

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]