例子
Ï
上面这个例子中,当单价为35.3,数量为3时,计算出的结果为:105.899999,而不是105.9
我问了chatgpt,给出的答案是:
这是因为JavaScript中使用浮点数进行计算时,可能会出现精度丢失的问题。具体原因是浮点数在计算机内部以二进制表示,但某些十进制小数无法精确转换为二进制,导致在计算过程中出现了一些微小的误差。
为了解决这个问题,可以使用JS提供的toFixed方法来保留指定位数的小数,或者使用其他的方法将浮点数转化为整数进行计算,然后再进行相应的处理。
所以如果你需要保留小数位数的话,可以使用toFixed方法,如果不需要保留小数位数或者需要更高精度的计算,可以将数值转换为整数进行计算。另外,对于货币相关的计算,建议使用专门的库(如Big.js等)进行处理,以避免精度丢失的问题。
所以
以上代码的部分应该改为
const amount = item.invoice_pcs * item.invoice_unitprice;
item.invoice_amount = amount.toFixed(3);
这样就没问题了
评论区