JavaScript:十进制值

时间:2010-08-11 02:58:23

标签: javascript decimal

我可以在JavaScript中使用什么十进制类型?它不受支持(0.1 + 0.2 !== 0.3),我需要它来表示银行/金融应用程序中的确切值。请参阅 The State and Future of JavaScript 以获取良好的读取以及JavaScript背后的脏细节以及它(缺乏)对十进制算术的支持。

“十进制”,我的意思是:

  1. 无限范围和任意精度(如Java中的BigDecimal)或
  2. 范围和精度有限,但适合财务计算(如C#中的decimal)。
  3. 那么,使用十进制值的库或解决方案是什么?谢谢!

4 个答案:

答案 0 :(得分:13)

通常建议将 1 作为一个整数代表分数来处理货币:2572美分而不是25.72美元。这是为了避免您提到的浮点运算问题。幸运的是,浮点中的整数运算是精确的,因此可以通过缩放来避免十进制表示错误。


1 Douglas Crockford:JavaScript: The Good Parts: Appendix A - Awful Parts (page 105)

答案 1 :(得分:5)

Javascript确实有浮点支持。但无论如何,对于财务记录,最简单的实现只是将您的值存储在标准整数中。您可以声明一个整数来表示以美分为单位的金额,或者两个整数来表示一个美元和一个美分。

因此,18.57美元在第一种技术中将成为1857cents,在第二种技术中将成为1857美元,在第二种技术中将成为57美分。

这具有完全准确的附加优点,因为整数纯粹作为唯一的二进制表示存储,不会出现舍入错误。

答案 2 :(得分:3)

同时查看BigNumberthat post

答案 3 :(得分:2)

以下库似乎在js(节点和浏览器)中实现了十进制: https://npmjs.org/package/jsdecimal