我可以在JavaScript中使用什么十进制类型?它不受支持(0.1 + 0.2 !== 0.3
),我需要它来表示银行/金融应用程序中的确切值。请参阅 The State and Future of JavaScript 以获取良好的读取以及JavaScript背后的脏细节以及它(缺乏)对十进制算术的支持。
“十进制”,我的意思是:
BigDecimal
)或decimal
)。那么,使用十进制值的库或解决方案是什么?谢谢!
答案 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)
答案 3 :(得分:2)
以下库似乎在js(节点和浏览器)中实现了十进制: https://npmjs.org/package/jsdecimal