js 运算误差解决方案
2015-11-26 16:33
483 查看
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');//注意:表达式必须以字符串的形式传入
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');//注意:表达式必须以字符串的形式传入
相关文章推荐
- mysql binlog二进制日志详解
- 详解C++编程中对二进制文件的读写操作
- 整理C# 二进制,十进制,十六进制 互转
- c#二进制逆序方法详解
- JS幻想 读取二进制文件第1/2页
- 使用jscript实现二进制读写脚本代码
- C#二进制序列化实例分析
- JavaScript前端开发之实现二进制读写操作
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
- javascript 二进制运算技巧解析
- 如何判断一个整数的二进制中有多少个1
- MSSQL 将截断字符串或二进制数据问题的解决方法
- 二进制中1的个数
- C++ 十进制转换为二进制的实例代码
- C语言十进制转二进制代码实例
- C++二进制翻转实例分析
- PowerShell把IP地址转换成二进制的方法
- 科学知识:二进制、八进制、十进制、十六进制转换
- C#读取二进制文件方法分析
- Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)