Задание для математиков и JavaScript-программистов
Здравствуйте.
Необходимо придумать формулу расчета или создать js-скрипт для web со следующими исходными данными:
Калькулятор-конвертер для переводов/конвертирования электронных денег
Условия расчета:
Параметры "ком_исходной_системы" и "ком_результирующей_системы":
Фиксированная сумма, % от суммы обмена, минимальная сумма при установленном % (мин_сумма), максимальная сумма при установленном % (макс_сумма).
Алгоритм вычисления ком_исходной_системы и ком_результирующей_системы:
Если фиксированная_сумма не равна нулю, от суммы_обмена отнимается (прибавляется при обратном расчете) фиксированная_сумма.
В противном случае вычисляется % от суммы_обмена.
Если мин_сумма не равна нулю и вычесленный % от суммы_обмена меньше мин_суммы, то % от суммы_обмена приравнивается к мин_сумме.
Если макс_сумма не равна нулю и вычесленный % от суммы_обмена больше макс_суммы, то % от суммы_обмена приравнивается к макс_сумме.
наша_комиссия_% - равен установленном % от суммы_обмена
скидка_клиента_% - представляет собой установленный процент от нашей_комиссии_%. 100% скидки_клиента_% равна нашей_комиссии_%.
При скидка_клиента_% не равной нулю наша_комиссия_% вычисляется следующим образом: наша_комиссия_% - ((наша_комиссия_% / 100) * скидка_клиента_%).
Формула расчета при введенной исходной сумме:
(исходная_сумма_в_валюте_исходной_системы - ком_исходной_системы)/ (курс_результирующей_системы / курс_исходной_системы) - (наша_комиссия_% - ((наша_комиссия_% / 100) * скидка_клиента_%)) - ком_результирующей_системы = результирующая_сумма_в_валюте_результирующей_системы
Формула расчета при введенной результирующей сумме:
(результирующая_сумма_в_валюте_результирующей_системы + ком_результирующей_системы) * (курс_исходной_системы / курс_результирующей_системы) + (наша_комиссия_% - ((наша_комиссия_% / 100) * скидка_клиента_%)) + ком_результирующей_системы = исходная_сумма_в_валюте_исходной_системы
ВАЖНО! Опишу ситуацию на простом примере. Возьмем курс доллара к рублю равным 28,1778. Тогда 30 рублей деленае на курс 28,1778 с ограничением (не округлением!!!) до второго знака после запятой равны 1,06. При обратном расчете 1,06 * 28,1778 равно 29,86, но при расчете 29,86 / 28,1778 результирующая сумма будет равняться 1,05. Проблема наглядна и округления (использование floor, ceil, round) не дадут точного результата при ВСЕХ возможных вариантах. Требуется проводить корректировку.
ЗАДАНИЕ: Написать на javascript (учитывая особенности поведения javascript в разных браузерах) калькулятор, по заданной формуле, который обеспечит точные вычисления при ВСЕХ возможных вариациях как исходной, так и результирующей сумм
Задача сделать так, чтобы независимо от того, в какое поле мы вводим сумму ("результирующая_сумма_в_валюте_системы" или "исходная_сумма_в_валюте_системы") был точен как прямой расчет, так и обратный. В этом и основная проблема, т.к. прямой просчет без проблем получается, а "обратный", когда мы вводим сумму в "результирующая_сумма_в_валюте_системы" учитывая количество преобразований /просчетов и ограничений на длину строки с плавающей запятой в JS -- сумма получается незначительно отличающаяся (несколько копеек), приходиться делать корректировки .... И все равно как-то убого получается, так быть не должно...
Могу предоставить ссылку на сайт, где необходимо это сделать при личном общении.