JavaScript: десятичные значения

Что я могу использовать в качестве десятичного типа в JavaScript? Он не поддерживается ( 0,1 + 0,2! == 0,3 ), и он мне нужен для представления точных значений в банковском / финансовом приложении. См. Состояние и будущее JavaScript для хорошего чтения и грязных деталей за JavaScript и его (отсутствие) поддержки десятичной арифметики.

Под «десятичной» я подразумеваю либо:

  1. бесконечность -диапазон и произвольная точность (например, BigDecimal в Java) или
  2. ограниченный диапазон и точность, но подходит для финансовых расчетов (например, десятичное в C #).

Так какая библиотека или решение существует для работы с десятичными значениями? Спасибо!

25
задан s.m. 10 July 2017 в 12:37
поделиться

3 ответа

Javascript действительно поддерживает числа с плавающей запятой. Но в любом случае для финансовых отчетов простейшей реализацией будет просто сохранение ваших значений в стандартных целых числах. Вы можете объявить целое число для представления суммы в центах или два целых числа: одно для долларов и одно для центов.

Таким образом, 18,57 доллара превратились бы в 1857 центов по первой методике или 18 долларов и 57 центов по второй.

У этого есть дополнительное преимущество, заключающееся в полной точности, поскольку целые числа хранятся исключительно как уникальное двоичное представление, не было бы такой вещи, как ошибки округления.

5
ответ дан 28 November 2019 в 21:50
поделиться

Часто рекомендуется 1 обрабатывать деньги как целое число, представляющее количество центов: 2572 центов вместо 25,72 долларов. Это сделано для того, чтобы избежать проблем с арифметикой с плавающей запятой, о которых вы упомянули. К счастью, целочисленная арифметика с плавающей запятой является точной, поэтому ошибок десятичного представления можно избежать путем масштабирования.


1 Дуглас Крокфорд: JavaScript: Хорошие моменты: Приложение A - Ужасные части (страница 105) .

13
ответ дан 28 November 2019 в 21:50
поделиться

Взгляните также на BigNumber и в этом сообщении .

3
ответ дан 28 November 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: