Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a Money class for JavaScript? [closed]

Disclaimer: complete rewrite for clarity as of 10/14/2011

Given the number primitive in JavaScript is an IEEE 754 64-bit floating point (known in other languages as a double), and using floats to model currencies is a bad idea, is a Money prototype (JavaScript) or a Coffeescript Class that eases use of pseudo-integer cents and string currency ISO 4217 code to represent currency available?

^ There's still gotta be a better way to say that.

I'm hoping to find something that mirrors the common design pattern of the many other languages out there that do include an integer primitive.

As examples, I'm familiar with the money gem for ruby, and the python-money package, both of which implement variations of this design pattern.

Ideally looking for something that will play nice with backbone.js and node.js, but all suggestions appreciated.

Edit 4: As far as I can tell, as long as an implementation of roundDownOrUp ? floor : ceiling is called on the Number after every operation (& in between chained operations) everything would function as if one were dealing with integers.


Old information, retained to document the history of the question.

I read How can I format numbers as money in JavaScript? where I found accounting.js and jQuery Globalize which both do pretty printing but are not designed to model currencies and perform operations with them.

Edit 1: Just found JSorm Currency in the npm registry which is ISO 4217 aware, but does not appear to include any fixes for float "gotchas". Please correct if I have misread.

Edit 2 folded into rewrite.

Edit 3: It looks like a good option would be to use node-bigint as suggested by @RicardoTomasi.

like image 271
Alec Wenzowski Avatar asked Oct 13 '11 01:10

Alec Wenzowski


1 Answers

Both bigdecimal.js and node-bigint have arbitrary precision.

I'd go with bigint. bigdecimal is a GWT version of of Java's BigDecimal, clocking in at 113kb, so the code is not what one would call readable.

update: money.js has just been released, but it uses javascript's native Number, and is focused on currency conversion.

like image 51
Ricardo Tomasi Avatar answered Oct 23 '22 21:10

Ricardo Tomasi