JavaScript有一个Money类吗?

16

免责声明:由于2011年10月14日的明确重写

鉴于JavaScript中的number原始类型是IEEE 75464位浮点数(在其他语言中称为双精度浮点数),使用浮点数来模拟货币是一个不好的想法,那么是否有一种Money原型(JavaScript)或Coffeescript类可以简化虚整数美分和字符串货币 ISO 4217 代码表示货币可用

^肯定还有更好的表达方式。

我希望能够找到与许多其他语言中包含整数原始类型的常见设计模式相似的东西。

例如,我熟悉ruby的money gem和python的python-money包,它们都实现了此设计模式的变体。

理想情况下,我希望能找到一些与backbone.jsnode.js友好的东西,但是所有的建议都将受到赞赏。

编辑4: 就我所知,只要在每个操作(&在链接操作之间)后对数字调用roundDownOrUp ? floor : ceiling的实现,一切都会像处理整数一样运行。


旧信息,保留以记录问题的历史。

我读了如何在JavaScript中将数字格式化为货币,在那里我发现了accounting.jsjQuery Globalize,它们都可以进行漂亮的打印,但不是设计为模拟货币并执行与其相关的操作。

编辑1: 刚找到JSorm Currencynpm registry中,它具有 ISO 4217 意识,但似乎没有包含任何针对小数"惯用法"的修复。如果我理解有误,请纠正。

编辑2合并到重写中。

编辑3: 看起来一个好的选项是使用node-bigint,如 @RicardoTomasi 建议。


7
如果没有的话,你总是可以建立一个。:D - Jared Farrish
4
如果不行的话,我肯定会这样做 ;) (注:原句中的“;)”是一种表情符号,表示轻松、开玩笑等情感语气。) - Alec Wenzowski
2
只需确保为其他人发布。我想在金融或交易行业中,某个地方可能已经有人做过这件事,但它可能是专有的。 - Jared Farrish
1
一旦涉及到会计系统,您需要适应不同情况下的不同规则(例如四舍五入)。我想,除非您要处理英镑或类似的非十进制系统,否则货币功能相当简单。 - RobG
@RobG - .convertToUS()解决了那个问题... :P :P :P - Jared Farrish
显示剩余2条评论
3个回答

12

无论是bigdecimal.js 还是 node-bigint 都具备任意精度。

我会选择bigint。bigdecimal是Java的BigDecimal的GWT版本,大小为113kb,因此代码并不算易读。

更新:刚发布了money.js,但它使用JavaScript的原生Number,并专注于货币转换。


1
使用JavaScript的原生Number有什么问题吗? - Mitja
@Mitja 精度问题。例如在 JavaScript 中,0.1 + 0.2 = 0.30000000000000004,这对于货币管理和其他需要精确计算的事情来说是非常糟糕的! - Gaston Sanchez

0

我在寻找一个能够处理Node.js中的货币的工具时,发现了这个问题,然后找到了esmoney,它是一个简单直接的货币计算器。https://www.npmjs.com/package/es-money


0

在ku4js-kernel库中有一个非常棒的$.money类,它几乎可以满足你对货币的所有需求。你可以在这里找到文档。玩得开心!:{)}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接