JavaScript 深入学习及常用工具方法整理 ---- 01.浮点数
在JavaScript中是不区分整数值和浮点数值的,其中所有的数字均用浮点数值表示。JavaScript采用IEEE 754标准(有兴趣可以浏览网络规范分类下的IEEE 754标准,需要原文件请在留言处联系我)定义的64位浮点格式表示数字。
目前只针对浮点数的计算。其他的内容会在后续时间进行完善,也希望大家积极提供资源,让你学到的更多。
浮点数直接量可以用以下语法表示:
[digits][.digits][(E|e)[(+|-)]digits]
IEEE754是一种二进制表示法,可以精确的表示(1/2,1/8等等),而常用的十进制分数(1/10, 1/100)则不能精确表示
提供以下工具方法供大家使用。
之前在网上找到过一些资料,使用过程中发现除法有点问题,这里提供两种实现方法:
//说明:这个函数返回较为精确的加法结果。 //floatAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 function floatAdd(arg1,arg2){ var r1=0,r2=0; try{r1=arg1.toString().split(".")[1].length}catch(e){} try{r2=arg2.toString().split(".")[1].length}catch(e){} m=Math.pow(10,Math.max(r1,r2)) return (arg1*m+arg2*m)/m } //这个函数返回较为精确的减法结果。 //floatSub(arg1,arg2) //返回值:arg1减上arg2的精确结果 function floatSub(arg1,arg2){ return floatAdd(arg1,-arg2); } //这个函数返回较为精确的乘法结果。 //floatMul(arg1,arg2) //返回值:arg1乘以arg2的精确结果 function floatMul(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) } //这个函数返回较为精确的除法结果。 //调用:floatDiv(arg1,arg2) //返回值:arg1除以arg2的精确结果 function floatDiv(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){} r1=Number(arg1.toString().replace(".","")) r2=Number(arg2.toString().replace(".","")) return floatMul((r1/r2),Math.pow(10,t2-t1)); //调用乘法 } function floatDiv2(arg1,arg2){ var m=0,s1=arg1.toString(),s2=arg2.toString(),r1,sr1; try{m+=s1.split(".")[1].length}catch(e){} try{m+=s2.split(".")[1].length}catch(e){} r1=Number(s1.replace(".",""))/Number(s2.replace(".","")) try{m+=r1.toString().split(".")[1].length}catch(e){} return Number(r1.toString().replace(".",""))/Math.pow(10,m) }