码迷,mamicode.com
首页 > Web开发 > 详细

js中的浮点数运算精度问题

时间:2015-12-26 23:28:55      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

js中的浮点数精度一般可以达到16位有效数字,因此有人使用parseFloat(x.toFixed(12))来提高js中浮点运算的精度。

经验证,这种方法当整数位数较少时基本正确,但对于较大或较小的运算结果是无效的,如1222.31*2344,直接运算结果是2865094.6399999997,parseFloat((1222.31*2344).toFixed(12))后仍然是2865094.6399999997,并未提升精度。

 

此时,应该先将结果归一化后再进行toFixed(12)这样的处理,可以保证12位有效数字,下面是对较大运算结果的处理:

function accurate(x) {
  var factor = Math.pow(10, Math.abs(x).toString().split(‘.‘)[0].length + 1);
  return (x / factor).toFixed(12) * factor;
}

accurate(1222.31*2344);

// 输出2865094.64

 

对于较小数,则需要找到其第一个非0的小数位(假设是小数点后第n位),然后先乘以一个10的n次方,然后toFixed(12),再除以10的n次方。

js中的浮点数运算精度问题

标签:

原文地址:http://www.cnblogs.com/mariostudio/p/5079261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!