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只能输入数字和两位小数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Kubernetes权威指南
龚正、吴治辉、王伟、崔秀龙、闫健勇、崔晓宁、刘晓红 / 电子工业出版社 / 2016-10 / 99
Kubernetes是由谷歌开源的Docker容器集群管理系统,为容器化的应用提供了资源调度、部署运行、服务发现、扩容及缩容等一整套功能。《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第2版)》从一个开发者的角度去理解、分析和解决问题,囊括了Kubernetes入门、核心原理、实践指南、开发指导、高级案例、运维指南及源码分析等方面的内容,图文并茂、内容丰富、由浅入......一起来看看 《Kubernetes权威指南》 这本书的介绍吧!