侧边栏壁纸
博主头像
Wood Chen博主等级

独唱独酬,独行独坐还独卧

  • 累计撰写 233 篇文章
  • 累计创建 166 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

Javascript计算,精度丢失的问题

wood
2023-04-12 / 0 评论 / 0 点赞 / 12 阅读 / 1706 字

例子


      
        
         
            
          
          
            
          
          
            
          
          
Ï

上面这个例子中,当单价为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);

这样就没问题了

0

评论区