JavaScript数字类型对货币操作的安全性如何

How safe is JavaScript number type for money operations?

本文关键字:安全性 操作 货币 数字 类型 JavaScript      更新时间:2023-09-26

使用JavaScript数字类型(64位双精度)进行货币操作安全吗?我们计划为小企业开发一款软件,金额通常不到100000美元,但我认为数字可能会大得多,因为我们使用当地货币,例如,1美元=6.5人民币。

我知道可能会失去准确性,但在现实世界中有多糟糕?

我还建议我们可以跳过之类的问题

0.2 + 0.1 = 0.30000000000000004

因为在使用本地货币设置截断数字后,它将是相同的,例如$0.30

有些人还建议将数值乘以100来缩放,但我不确定这是否适用于所有情况,因为我认为可能存在点后超过2位数的货币。

我建议您在处理金钱时使用整数。浮点运算是不可靠的,所以最好使用固定类型进行货币计算。

然而,有bignumber.js库,它经常用于处理与货币相关的计算。

这里有一个很好的参考和相关线程:JavaScript中的精确财务计算。Gotchas是什么?

我认为最好的方法是使用特殊库

像bignumber.js

例如:

0.3 - 0.1                           // 0.19999999999999998  
x = new BigNumber(0.3)
x.minus(0.1)                        // "0.2"
x                                   // "0.3"