js 运算误差解决方案

来源:互联网 发布:会员返利系统源码 编辑:程序博客网 时间:2024/05/22 12:19

1.因为计算机只认识二进制,所以某些数字二进制是无限循环的,例如:0.1=> 0.0001 1001 1001 ...无限循环   ,所以产生了精度问题,c这类语言已经封装好方法来避免,然而js并没有,为此带来不少的麻烦,特别是需要频繁计算的项目,出现bug还不容易发现。不扯皮,上解决方案:

1.化零为整

先把小数乘以10的次幂,然后再运算。

0.1+0.2=>((0.1*10)+(0.2*10))/10=>0.3;

当然这只是思路,实际应用还有很多问题,比如要判断有几位小数位,当表达式复杂的时候可阅读性的问题,我的思路是分别写加减乘除四个运算方法,把四个方法放到windwo对象的原型中(不推荐)或者放到某个模块类中;


2.CalcEval.js引擎

不想动脑的福利来了,CalcEval引擎专门解决js精度问题。


引入CalcEval.js

<script src="js/CalcEval.js"></script>

var ce=new CalcEval();//创建引擎对象

var result=ce.eval('0.1+0.2');//注意:表达式必须以字符串的形式传入


0 0
原创粉丝点击