Недавно мне пришлось разрабатывать приложение для обработки денег, которое было бы полностью на javascript, express.js, REST apis, полном стеке js для узла / браузера. К сожалению, приложение обрабатывает различные пользовательские вычисления, такие как усреднение результатов. Конечно, при усреднении результатов в игру вступают сложение и деление с плавающей запятой. Таким образом, я бы получил значения, которые были выключены примерно на 0,12 (12 центов!).
Я понимаю рекомендуемые варианты для работы с поплавками в теории:
- Рассчитать в целых числах
- Круглый
- Использовать десятичный тип данных где-нибудь еще
Подход с целыми числами для валюты - это хорошо, это имело бы смысл, но, к сожалению, если запросы поступают в десятичной форме, то все равно должны выполняться какие-то вычисления для первоначального преобразования чисел в целые числа, и вероятность ошибки все еще сохраняется.
Допустим, приходит запрос на добавление 44.67
в список значений в долларах.
Было бы неплохо работать с ним в чистых целочисленных единицах, но чтобы попасть туда, сначала нужно умножить на 100, что, как я подозреваю, приводит к целому набору ошибок.
Так в javascript каков процесс обработки плавного преобразования между десятичными или долларовыми запросами и вычислениями, которые позволяют избежать ошибок с плавающей запятой?
В таком случае требуется ли база данных, а значения просто должны быть переданы в базу данных в виде строк? Или есть способ конвертировать "без потерь" в целые числа в JavaScript? Или есть какая-то другая техника при обращении с деньгами и требовании точности?