Существуют ли какие-либо хорошие валюты javascript или десятичные классы?


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

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

24.56 * .3

Выходы

7.36799999999

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

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

6   8   2011-05-11 20:23:36

6 ответов:

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

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

Целые числа.

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

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

Есть Math

Математический объект встроен в спецификацию JavaScript, поэтому каждый браузер имеет его изначально.

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

Еще немного поискав, я наткнулся на это.

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

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

Ku4jQuery-ядро содержит как класс money, так и математическую утилиту, содержащую операции и округление, включая round, roundUp и roundDown. Это хорошие методы, потому что вы можете передать значение для округления. Например, вы можете сделать $.математика.раунд (3.4567, -2), и он будет округлять число 3.4567 до ближайшего 10^-2. То же самое касается и денег. $.деньги (100,87).разделите(2).загон().toString() даст "$50.44". Вы можете пойти дальше и добавить номинал денег в качестве второго параметра, скажем " B" для биткоина -$.деньги (100,87, "Б").разделите(2).загон().toString (). Вы можете найти больше об этой библиотеке здесьku4jQuery-kernel и другие библиотеки, которые вы можете найти полезными здесьkodmunki github . Эти библиотеки тесно поддерживаются и используются во многих производственных проектах. Если вы решите попробовать их, я надеюсь, что вы найдете их полезными! Счастливое кодирование: {)}

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

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

Https://github.com/ericelliott/moneysafe