javascript小数精度丢失的完美解决方法
更新时间:2016年05月31日 09:10:17 投稿:jingxian
下面小编就为大家带来一篇javascript小数精度丢失的完美解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况.
javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1 = 0.2999999999等,下面列出可以完美求出相应精度的四种js算法
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 accMul((r1/r2),pow(10,t2-t1));
}
} /* 何问起 hovertree.com */
//乘法
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)
}
//加法
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
}
//减法
function Subtr(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));
n=(r1>=r2)?r1:r2;
return ((arg1*m-arg2*m)/m).toFixed(n);
}
以上这篇javascript小数精度丢失的完美解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
如何将JavaScript(JS)代码转换为TypeScript(TS)的注意事项详解
JavaScript(JS)是目前最流行的前端开发语言之一,TypeScript(TS)是JavaScript的超集,增加了静态类型检查特性,这篇文章主要给大家介绍了关于如何将JavaScript(JS)代码转换为TypeScript(TS)注意事项的相关资料,需要的朋友可以参考下2025-05-05
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
JavaScript中解决闭包只能取得包含函数中任何变量最后一个值的问题2010-08-08
谷歌浏览器不支持showModalDialog模态对话框的解决方法
谷歌浏览器不支持showModalDialog模态对话框和无法返回returnValue,这个问题,想必很多朋友都有遇到过吧,解决方法很简单,下面的思路,大家可以看看2014-09-09
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
很多时候需要用到限制文本框的数字输入,试过许多方法,都不太理想,遂决定自己实现一个来玩玩,接下来介绍曾经使用过的方法与自定义方法的对比,感兴趣的朋友可以了解下啊2013-01-01
JS面向对象、prototype、call()、apply()
那天用到prototype.js于是打开看看,才看几行就满头雾水,原因是对js的面向对象不是很熟悉,于是百度+google了一把,最后终于算小有收获,写此纪念一下^_^。2009-05-05


最新评论