前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于JS的浮点数计算精度问题解决方案

关于JS的浮点数计算精度问题解决方案

作者头像
honey缘木鱼
发布2018-09-26 17:26:52
3.5K0
发布2018-09-26 17:26:52
举报
文章被收录于专栏:娱乐心理测试

由于接触JS不久,关于JS的浮点数的计算更是之前没有用过,这次写JS项目发现的这个问题:0.1+0.2=0.3000000000004,为什么会出现这么奇怪的问题呢 ?在网上找了一些资料,JS作为解释性语言,直接计算会有浮点数精度丢失问题。 门弱类型语言的JavaScript ,从设计思想上就没有对浮点数有个严格的数据类型。

解决方案: 一. 有种最简单的解决方案,就是给出明确的精度要求,在返回值的过程中,计算机会自动四舍五入,比如:

代码语言:javascript
复制
var numA = 0.1; 
var numB = 0.2; 
alert( parseFloat((numA + numB).toFixed(2)) === 0.3 );

用这种方法在测试过程中也有问题,例如6.8-0.4打印为6.3,本应为6.4所以这里转换结果还是不正确。 在浮点数计算的时候,很多时候产生的都是这种极限数据,如果要精确进行整数转换,要放大的倍数过大。这里我们可以用四舍五入对转换的过程进行优化:

代码语言:javascript
复制
Math.round((6.8-0.9)*10);//四舍五入
59

优化之后的自定义函数:

代码语言:javascript
复制
Math.formatFloat = function(f, digit) { 
    var m = Math.pow(10, digit); 
    return parseInt(f * m, 10) / m; 
} 
var A = 0.1; 
var B = 0.2;
console.log(Math.formatFloat(A + B, 1) === 0.3);

因此,为了避免产生精度差异,我们要把需要计算的数字乘以 10 的 n 次幂,换算成计算机能够精确识别的整数,然后再除以 10 的 n 次幂,大部分编程语言都是这样处理精度差异的,我们就借用过来处理一下 JS 中的浮点数精度误差。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.09.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档