javascript解决小数的加减乘除精度丢失的方案_javascript技巧

javascript解决小数的加减乘除精度丢失的方案_javascript技巧

ID:30779868

大小:115.28 KB

页数:11页

时间:2019-01-03

javascript解决小数的加减乘除精度丢失的方案_javascript技巧_第1页
javascript解决小数的加减乘除精度丢失的方案_javascript技巧_第2页
javascript解决小数的加减乘除精度丢失的方案_javascript技巧_第3页
javascript解决小数的加减乘除精度丢失的方案_javascript技巧_第4页
javascript解决小数的加减乘除精度丢失的方案_javascript技巧_第5页
资源描述:

《javascript解决小数的加减乘除精度丢失的方案_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、javascript解决小数的加减乘除精度丢失的方案原因:js按照2进制來处理小数的加减乘除,在argl的基础上将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况.javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1=0.2999999999等,下面列出可以完美求出相应精度的四种js算法functionaccDiv(argl,arg2){vartl=0,t2=0,rl,r2;try{tl=arg1.toString()・split(,z・“)[1]・length}catch(e){}try{t2=arg2.t

2、oString().split(,z.,z)[1].length}catch(e){}with(Math){rl二Number(argl.toStringO.replace(".〃,〃〃))r2=Numbcr(arg2・toString()・replace(〃・",""))returnaccMul((rl/r2),pow(10,t2~tl));}}〃乘法functionaccMul(argl,arg2){varm=0,sl=argl.toString(),s2=arg2.toString();try{m+=sl.split(,z.“)[1].

3、length)catch(e){}try{m+=s2.split(z,.z,)[1].length}catch(e){}rcturnNumber(si・replace(,z・","〃))*Number(s2・replace("・〃))/Math・pow(10,m)}//加法functionaccAdd(argl,arg2){varrl,r2,m;try{rl=arg1.toString()・split("、“)[1]・length}catch(e){rl=0}try{r2=arg2.toString()・split(".”)[1]・lengt

4、h}catch(e){r2=0}m=Math.pow(10,Math,max(rl,r2))return(argl*m+arg2*m)/m}//减法functionSubtr(argl,arg2){varrl,r2,m,n;try{rl=argl.toStringO.split(z,.z,)[1].length}catch(e){rl=0}try{r2=arg2.toString().split(〃・")[1].length}catch(c){r2=0}m二Math.pow(10,Math,max(rl,r2));n=(rl>=r2)?rl:

5、r2;return((3rgl*ni-3rg2*ni)/m).toFixed(n);}下面我们來具体分析洗在JavaScript中关于数字精度的丢失问题一、JS数字精度丢失的一些典型问题1.两个简单的浮点数相加0.1+0.2!=0.3//trueFirebug^<>控制台▼HTMLCSS囱本DOM网络Cookiesd0清陰保持概况筋希消息调试信息Cookies0.3COCOCOCOCOCOC-OC4这真不是Firebug的问题,叮以用alert试试(哈哈开玩笑)。看看Java的运算结果[JiPerson.java凉packagetao;pub

6、licclassPerson{publicstaticvoidmain(StFing[]args)System.out.printin(0.1+0.2);厦(Problems@Javadoc窟Declaration貝Console凉Person[JavaApplication]C:ProgramFiIesJavajre6binjavaw.exe(2015年10月26日下午2:12:40)0•30000000000000004再看看PythonPython3.5.0(v3.5.0:374f50^4567,Sep

7、132015,02:27:37)[MSCv.190064bit(AMD64)]onWin32Type"copyright"credits"or"license()"formoreinformation.0.1+0.20.30000000000000004>>n1.大整数运算9999999999999999二二10000000000000001//?Firebug>9999999999999999=10000000000000001true16位和17位数竟然相等,没天理啊。乂如varx二9007199254740992x+1==x//?看结果

8、>90071^9254740^2+1一90071^9254740^2true三观又被颠覆了。2.toFixcd不会四舍五入(Chrome)1.335.toFixed

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。