免责声明:为清楚起见,自 2011 年 10 月 14 日起完全重写
鉴于 JavaScript 中的 number
原语是 IEEE 754 64 位浮点(在其他语言中称为 double )和 using floats to model currencies is a bad idea , 是 Money 原型(prototype) (JavaScript) 或 Coffeescript Class 简化伪整数美分和字符串的使用 currency ISO 4217 code表示可用的货币?
^ 还是有更好的表达方式。
我希望找到能反射(reflect)许多其他语言的通用设计模式的东西,这些语言确实包含整数原语。
例如,我熟悉 money gem对于 ruby ,python-money包,两者都实现了这种设计模式的变体。
理想情况下,寻找可以与 backbone.js 配合使用的东西和 node.js ,但所有建议都表示赞赏。
Edit 4:据我所知,只要实现 roundDownOrUp ? floor : 天花板
在每次操作之后(以及在链式操作之间)都会在 Number 上调用,一切都会像处理整数一样运行。
旧信息,保留以记录问题的历史。
我读过 How can I format numbers as money in JavaScript? 我在哪里找到 accounting.js和 jQuery Globalize它们都可以进行 pretty-print ,但并非旨在模拟货币并对其进行操作。
编辑 1:刚刚找到 JSorm Currency在 npm registry这是 ISO 4217 感知的,但似乎不包括任何对 float “gotchas”的修复。如有误读请指正。
Edit 2 折叠成 rewrite。
编辑 3:看起来不错的选择是使用 node-bigint正如@RicardoTomasi 所建议的那样。
最佳答案
两者bigdecimal.js和 node-bigint具有任意精度。
我会选择 bigint。 bigdecimal 是 Java 的 BigDecimal 的 GWT 版本,大小为 113kb,因此代码不是所谓的可读。
更新: money.js刚刚发布,但是使用的是javascript原生的Number,并且专注于货币转换。
关于javascript - JavaScript 是否有 Money 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748563/