Что я могу использовать в качестве десятичного типа в JavaScript? Он не поддерживается ( 0,1 + 0,2! == 0,3
), и он мне нужен для представления точных значений в банковском / финансовом приложении. См. Состояние и будущее JavaScript для хорошего чтения и грязных деталей за JavaScript и его (отсутствие) поддержки десятичной арифметики.
Под «десятичной» я подразумеваю либо:
BigDecimal
в Java) или десятичное
в C #). Так какая библиотека или решение существует для работы с десятичными значениями? Спасибо!
Javascript действительно поддерживает числа с плавающей запятой. Но в любом случае для финансовых отчетов простейшей реализацией будет просто сохранение ваших значений в стандартных целых числах. Вы можете объявить целое число для представления суммы в центах или два целых числа: одно для долларов и одно для центов.
Таким образом, 18,57 доллара превратились бы в 1857 центов по первой методике или 18 долларов и 57 центов по второй.
У этого есть дополнительное преимущество, заключающееся в полной точности, поскольку целые числа хранятся исключительно как уникальное двоичное представление, не было бы такой вещи, как ошибки округления.
Часто рекомендуется 1 обрабатывать деньги как целое число, представляющее количество центов: 2572
центов вместо 25,72
долларов. Это сделано для того, чтобы избежать проблем с арифметикой с плавающей запятой, о которых вы упомянули. К счастью, целочисленная арифметика с плавающей запятой является точной, поэтому ошибок десятичного представления можно избежать путем масштабирования.
1 Дуглас Крокфорд: JavaScript: Хорошие моменты: Приложение A - Ужасные части (страница 105) .