开发者

Are there any good JavaScript currency or decimal classes?

开发者 https://www.devze.com 2023-03-04 23:37 出处:网络
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 flo

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 hav开发者_如何学JAVAing to constantly adjust for floating point errors?


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).


Instead of using integers (which have their own problems)

I would use the bignumber.js library


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.


ku4jQuery-kernel contains both a money class and a math utility that contain operations and rounding, including round, roundUp and roundDown. These are nice methods because you can pass a value to round to. For example you can do $.math.round(3.4567, -2) and it will round the number 3.4567 to the nearest 10^-2. The same goes for money. $.money(100.87).divide(2).roundUp().toString() will yield "$50.44". You can go further and add the denomination of money as a second parameter, say "B" for Bitcoin, $.money(100.87, "B").divide(2).roundUp().toString(). You can find more about this library here ku4jQuery-kernel and more libraries that you may find useful here kodmunki github. These libraries are closely maintained and used in many production projects. If you decide to try them, I hope that you find them useful! Happy coding :{)}


New kid on the block: moneysafe. It's open-source, and uses a functional approach that allows smart composition.

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

https://github.com/ericelliott/moneysafe


The toFixed method can round to a given number of decimals.

There is also a Javascript sprintf implementation.

0

精彩评论

暂无评论...
验证码 换一张
取 消