JavaScript运算出现很多小数导致运算不精确的问题,用toFixed解决
栏目: JavaScript · 发布时间: 5年前
内容简介:最近碰到一是微信充值的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只能输入数字和两位小数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
解密搜索引擎技术实战
罗刚 / 2011-6 / 69.80元
《解密搜索引擎技术实战-Lucene&Java精华版(附盘)》,本书主要包括总体介绍部分、爬虫部分、自然语言处理部分、全文检索部分以及相关案例分析。爬虫部分介绍了网页遍历方法和如何实现增量抓取,并介绍了从网页等各种格式的文档中提取主要内容的方法。自然语言处理部分从统计机器学习的原理出发,包括了中文分词与词性标注的理论与实现以及在搜索引擎中的实用等细节,同时对文档排重、文本分类、自动聚类、句法分析树......一起来看看 《解密搜索引擎技术实战》 这本书的介绍吧!