JavaScript 深入学习及常用工具方法整理 ---- 01.浮点数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
}

 

以上是关于JavaScript 深入学习及常用工具方法整理 ---- 01.浮点数的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript学习笔记及知识点整理_1

前端技术学习路线及技术汇总

JavaScript 数组常用方法大全

JavaScript 原型的深入指南

深入学习 JavaScript——this 绑定

前端经典书籍整理(持续更新.....)