JavaScript运算出现很多小数导致运算不精确的问题,用toFixed解决
栏目: JavaScript · 发布时间: 6年前
内容简介:最近碰到一是微信充值的BUG,充值19.99变成充值19.98,导致金额前后,不 一致,仔细研究发现,JS某些小数运算会出现类似无限循环的小数微信只认整数,应该传 1999,结果变成 1998.9999999999998 变成最后充值 19.98元 ,差了一分钱,导致金额不匹配。其实这是JS在进行小数运算时,自动转换成了double所致,double的运算结果是不精确的,这种场景还有很多,比如:
最近碰到一是微信充值的BUG,充值19.99变成充值19.98,导致金额前后,不 一致,仔细研究发现,JS某些小数运算会出现类似无限循环的小数
var fee = 19.99 var all = fee * 100 console.log(all) > 1998.9999999999998
微信只认整数,应该传 1999,结果变成 1998.9999999999998 变成最后充值 19.98元 ,差了一分钱,导致金额不匹配。
其实这是JS在进行小数运算时,自动转换成了double所致,double的运算结果是不精确的,这种场景还有很多,比如:
console.log(0.1 + 0.2 == 0.3) > false console.log(0.1 + 0.2) > 0.30000000000000004 console.log(2.4/0.8) > 2.9999999999999996
解决方法:
1) 可以用toFixed来解决,如直接保留小数点后12位,可解决绝大部分场景的问题,注意toFixed后为字符串类型
console.log((0.1 + 0.2).toFixed(12) == 0.3) > true console.log((0.1 + 0.2).toFixed(12)) > 0.300000000000 console.log((2.4/0.8).toFixed(12)) > 3.000000000000
2) 先转成整型再运算
console.log((0.1 * 10 + 0.2 * 10) / 10) > 0.3
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- awk中符点型小数去掉小数点转换成整数的方法
- objective-c – NSDecimalNumber的小数部分
- 可以在MySQL中存储小数(22,2)的钱吗?
- 正则表达式判定保留2位小数的实现代码
- 在JSP中使用formatNumber控制要显示的小数位数方法
- 代码片段之jQuery控制input只能输入数字和两位小数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。