NestJS中dinero.js库allocate函数无终止执行问题求助
问题分析与解决方案
你的问题出在dinero.js的allocate方法处理超大金额+非精确浮点数比例时的死循环上:
- 你传入的
amount数值极大(3.37e19级别),且scale设为19,本身计算量就高 - 0.3、0.7这类十进制小数在二进制浮点数中是无限循环的,无法精确表示,导致
allocate内部的余数分配逻辑陷入无限迭代,既不结束也不报错
解决办法
优先用整数比例替代小数:把
[0.3, 0.7]改成[3, 7],整数比例没有浮点数精度问题,allocate能快速完成计算:const d = dinero({"amount":337582417582417600000,"currency":{"code":"USD","base":10,"exponent":2},"scale":19}); allocate(d, [3, 7]);必须用小数时转精确分数:如果业务要求必须用小数比例,先手动将其转换为最简分数的整数形式,比如0.3=3/10,0.7=7/10,本质还是用整数比例规避精度问题。
升级dinero.js版本:检查你当前使用的版本,部分旧版本存在此类边界场景的死循环bug,升级到最新稳定版可能直接解决问题。
内容的提问来源于stack exchange,提问作者Conde
相关产品推荐
相关产品推荐

