js浮点数计算精度问题处理
一、问题内容
在码牌支付过程中,输入支付金额为19.9元时,后端保存的却是19.89元
二、问题原因
由于js在进行一个浮点数与任何Number数据运算时,可能会产生精度不准确的问题。
问题代码:
1 | temp1.tradeFee = parseInt(Fee*100); //Fee为金额 |
浏览器在执行19.9*100时得到的结果是1989.9999999999998,会存在0.0000000002的误差,再通过parseInt方法取整后就造成了结果为1989
三、解决方案
由于浮点型直接计算可能会出问题,所以可以将其先转为整型计算,乘法先去掉小数点,先转为整数乘法,然后再将结果缩小n倍
1 | //调用 |
四、分析
个别数字精度丢失原因:因为计算机是采用二进制存取数据,有些浮点数二进制之后就成为无限不循环小数了,但是浮点数的小数部分最多支持 52 位,超过就自动舍入计算了,然后就会有精度损失问题
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 钥零零の博客!
评论