注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

【引用】javascript小数计算精度问题  

2011-11-01 21:05:01|  分类: Javascript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  据说js在进行数字计算时是将其转为二进制来计算再将结果转回十进制的,所以在计算某些小数时出现误差的情况,这种情况还很多,还有最近的Android2.1(其它版本不清楚)手机系统里自带的计算器也会偶尔出现这种情况,原因应该是一样的。如下两个例子:
  使用js计算:2657.76 + 801.36 = 3459.1200000000003
                           13.3 * 7.93 = 105.46900000000001
  转载两个简洁的处理这种问题的函数,很好用,减法可以类推,原理都是转成整数后再计算,再将结果除以10的n次方。

//js精确小数乘法函数,变成整数相乘后再除以小数进位
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)).toFixed(2);
}

//js精确小数加法函数,变成整数相加后再除以小数进位
function addNum(num1,num2){
var sq1,sq2,m;
try{sq1=num1.toString().split(".")[1].length;} catch(e){sq1=0;}
try{sq2=num2.toString().split(".")[1].length;} catch(e){sq2=0;}

m=Math.pow(10,Math.max(sq1,sq2));
return ( num1 * m + num2 * m ) / m;
}

  评论这张
 
阅读(127)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017