I am trying to deal with JavaScript values such as 23.45
, but I want to be able to do mathematical operations on these values (addition, subtraction, multiplication, division) without running into floating point issues. Yes, I might need to round the results sometimes, but I would like it to give reasonable answers.
Consider this in JavaScript:
24.56 * .3
Yields
7.36799999999
I would like it to come out with 7.368
.
Most languages have either a decimal or currency data type to deal with this. Has anyone built a class that can handle this sort of data effectively, or is there any other solution for dealing with these sorts of numbers without having to constantly adjust for floating point errors?
Instead of using integers (which have their own problems)
I would use the bignumber.js library
Integers.
There is no need to use floating-point for currency. Use fixed-point, where the number of decimal points is 0.
You count in pennies (or possibly in tenths of pennies).
New kid on the block:
moneysafe
. It's open-source, and uses a functional approach that allows smart composition.https://github.com/ericelliott/moneysafe
The toFixed method can round to a given number of decimals.
There is also a Javascript sprintf implementation.
There is
Math
The Math object is build into the JavaScript spec so every browser has it natively.
As for data types, JavaScript has
Number
. That's it. We have no other number data type. The best think to do is to try and work with Integers.Doing some more searching, I came across this.
https://stackoverflow.com/questions/744099/javascript-bigdecimal-library
It looks like none of them are ideal, but they do the job.