Есть ли хорошая валюта JavaScript или десятичные классы? - PullRequest
9 голосов
/ 11 мая 2011

Я пытаюсь иметь дело со значениями JavaScript, такими как 23.45, но я хочу иметь возможность выполнять математические операции над этими значениями (сложение, вычитание, умножение, деление) без проблем с плавающей запятой. Да, мне иногда нужно округлять результаты, но я бы хотел, чтобы он дал разумные ответы.

Рассмотрим это в javascript:

24.56 * .3

Урожайность

7.36799999999

Я бы хотел, чтобы он вышел с 7.368.

Большинство языков имеют десятичный или валютный тип данных для решения этой проблемы. Кто-нибудь создал класс, который может эффективно обрабатывать такого рода данные, или есть какое-то другое решение для работы с такого рода числами без необходимости постоянно корректировать ошибки с плавающей запятой?

Ответы [ 6 ]

9 голосов
/ 11 мая 2011

Целые.

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

Вы считаете в копейках (или, возможно, в десятых копеек).

4 голосов
/ 25 января 2015

Вместо использования целых чисел (которые имеют свои проблемы)

Я бы использовал библиотеку bignumber.js

2 голосов
/ 11 мая 2011

Существует Math

Объект Math встроен в спецификацию JavaScript, поэтому он есть в каждом браузере.

Что касается типов данных, JavaScript имеет Number.Вот и все.У нас нет другого типа данных номера.Лучше всего попытаться поработать с целыми числами.

1 голос
/ 07 августа 2017

Новый малыш на блоке: moneysafe. Он с открытым исходным кодом и использует функциональный подход, позволяющий создавать интеллектуальные композиции.

$(.1) + $(.2) === $(.3).cents;

https://github.com/ericelliott/moneysafe

1 голос
/ 13 апреля 2014

ku4jQuery-kernel содержит как денежный класс, так и математическую утилиту, которая содержит операции и округления, включая round, roundUp и roundDown. Это хорошие методы, потому что вы можете передать значение round. Например, вы можете сделать $ .math.round (3.4567, -2), и оно будет округлять число 3.4567 до ближайшего 10 ^ -2. То же самое касается денег. $ .money (100.87) .divide (2) .roundUp (). toString () даст «$ 50,44». Вы можете пойти дальше и добавить деноминацию денег в качестве второго параметра, скажем, «B» для биткойнов, $ .money (100.87, «B») .div (2) .roundUp (). ToString (). Вы можете найти больше об этой библиотеке здесь ku4jQuery-kernel и больше библиотек, которые могут оказаться полезными здесь kodmunki github . Эти библиотеки тщательно поддерживаются и используются во многих производственных проектах. Если вы решили попробовать их, я надеюсь, что вы найдете их полезными! Удачного кодирования: {)}

1 голос
/ 11 мая 2011

Продолжая поиск, я наткнулся на это.

https://stackoverflow.com/questions/744099/javascript-bigdecimal-library

Похоже, что ни один из них не идеален, но они делают свою работу.

...