提问人:fossmoat 提问时间:2/27/2023 最后编辑:fossmoat 更新时间:2/27/2023 访问量:138
javascript 中的货币转换和浮点精度
Currency conversion in javascript and float precision
问:
由于 JavaScript 在浮点数方面有其怪癖(例如,0.1+0.2 是 0.3 > 以及类似的除法),如何处理货币转换?通常,货币兑换率从小数点后 6 位或更多位开始浮动。将它们从一种货币转换为另一种货币,再到另一种货币,似乎很容易出现 javascript 浮点错误。虽然货币兑换是很常见的任务,但我想知道人们通常如何处理这个问题?
目前,我没有任何解决方案,也不确定它过去是否引起了问题。即使我有这个问题,也很可能会错过。我只是使用我拥有的任何货币汇率,然后乘/除以获得另一种货币。这就是我目前处理货币的方式
- 从第三方 API 获取货币汇率。示例响应
USD
{ base: 'USD', rates: { INR: 80.8653858542, GBP: ... } }
- 我假设虚拟货币与例如.这个比率永远不会改变。我选择了印度卢比,因为这是我的银行账户货币。我使用虚拟货币来确保无论汇率如何,我都可以始终向用户显示可预测的金额。
XXX
INR
1 XXX = 200 INR
- 我使用这种虚拟货币作为基础货币。因此,无论我从第 1 步收到什么利率,我都会将其转换为即 最后,价目表变为 ' { base: XXX, rates: { INR: 200, USD: 0.404326929271 }
USD
XXX
usdToXXX = usdToInr/200 = 80.8653858542/200 = 0.404326929271
- 现在,对于所有转换,我都使用XXX的价目表
答:
-1赞
RandomUser123
2/27/2023
#1
您可以使用适用于 JavaScript 的“任意精度十进制/浮点数”库 - 找到适合您情况的库。
据我所知,这些工作方式是将数字存储为不同的表示形式并使用不同的算法 - 类似于您用来“手动”添加/减法/乘法/除法数字的技术
相比之下,原始数字类型(整数、浮点数等)直接使用处理器,因此存在溢出、精度错误等问题
评论