js中进行浮点数运算时容易出现精度问题

1) 除法函数

//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 
//调用:accDiv(arg1,arg2) 
//返回值:arg1除以arg2的精确结果 

function accDiv(arg1,arg2){ 
    var t1=0,t2=0,r1,r2; 
    try{t1=arg1.toString().split(".")[1].length}catch(e){}   //--小数点后的长度
    try{t2=arg2.toString().split(".")[1].length}catch(e){}  //--小数点后的长度
    with(Math){ 
      r1=Number(arg1.toString().replace(".",""))  //--去除小数点变整数
      r2=Number(arg2.toString().replace(".",""))  //--去除小数点变整数
      return (r1/r2)*pow(10,t2-t1);   //---整数相除 在乘上10的平方  小数点的长度
    } 
}

2) 乘法函数

//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 
//调用:accMul(arg1,arg2) 
//返回值:arg1乘以arg2的精确结果 
function accMul(arg1,arg2){ 
    var m=0,s1=arg1.toString(),s2=arg2.toString(); 
    try{m+=s1.split(".")[1].length}catch(e){} 
    try{m+=s2.split(".")[1].length}catch(e){} 
    return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m) 
}

3) 加法函数

//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 
//调用:accAdd(arg1,arg2) 
//返回值:arg1加上arg2的精确结果 
function accAdd(arg1,arg2){ 
    var r1,r2,m; 
    try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} 
    try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} 
    m=Math.pow(10,Math.max(r1,r2)) 
    return (arg1*m+arg2*m)/m 
}

4) 减法函数

function accSub(arg1,arg2){ 
       var r1,r2,m,n; 
       try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} 
       try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} 
       m=Math.pow(10,Math.max(r1,r2)); 
       //last modify by deeka 
       //动态控制精度长度 
       n=(r1>=r2)?r1:r2; 
       return ((arg1*m-arg2*m)/m).toFixed(n); 
}

最新文章

  1. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
  2. 使用CoreProfiler/NanoProfiler实现跨平台&应用的整合性能调试
  3. 一个有趣的CM
  4. JavaScript思维导图—Window对象
  5. 执行带参数的sql字符串
  6. 【转】 C++中delete和delete[]的区别
  7. Python-While刷博爬虫
  8. The Name/Origin of Country names
  9. 2-Highcharts曲线图之折线图
  10. 安装mod_deflate模块启用apache的GZIP压缩
  11. C#holle world
  12. [HDU 1317]XYZZY[SPFA变形][最长路]
  13. WPF 自定义TextBox
  14. JAVA描述的简单ORM框架
  15. BigDecimal 转成 double
  16. jsp填坑:找不到属性
  17. 安装配置Greenplum
  18. 机器学习环境搭建-Pycharm
  19. Confluence 6 安装 Oracle
  20. 自己模拟写C++中的String类型

热门文章

  1. zabbix的搭建及操作(1)server-client架构
  2. 思维导图哪款好用?怎么借助MindManager 做旅游计划
  3. Mac book系统的垃圾清理如何进行?
  4. appium元素定位工具
  5. VisualStudio 编写汇编代码相关设置
  6. 《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜
  7. mysql主从同步上---主从同步原理
  8. houdini 鱼眼相机
  9. 创建实验楼课程app模块以及配置图片路径
  10. fist-第七天冲刺随笔