浮点数的乘除

 1 //浮点数乘除法
 2 function muldivfloat(num0,num1,bzstr){
 3     var ln0=getws(num0),//第一个值的的小数位数
 4         ln1=getws(num1),//第二个值的的小数位数
 5         lnz=Math.max(ln0,ln1),//取得小数位数中的最大数
 6         lncz,//小数位数的统计值
 7         num0str,//第一个值数字转字符
 8         num1str,//第二个值数字转字符
 9         resultz,//计算结果
10         lnqh;//除法后结果存储小数
11     
12     if(lnz===0){//如果数字原本就是整形,直接执行计算
13         if(bzstr==="*"){
14             resultz=Number(num0)*Number(num1);
15         }else{
16             resultz=Number(num0)/Number(num1);
17         }
18         return resultz;
19     }
20     
21     num0str=clearpoint(num0,".");
22     num1str=clearpoint(num1,".");
23     //根据传入的符号来判断是做乘法还是除法运算
24     if(bzstr==="*"){
25         lncz=ln0+ln1;//小数位数的总数
26         resultz=addwsfront((Number(num0str)*Number(num1str)).toString(),lncz);//对乘法运算后的结果执行位数补全
27         return Number(resultz.slice(0,-lncz)+"."+resultz.slice(-lncz));
28     } else {
29         lncz=ln0-ln1;//小数位数的差数
30         resultz=Number(num0str)/Number(num1str);
31         if(lncz===0){//如果除数,被除除数小数位相同,即直接返回计算值
32             return resultz;
33         }
34         lnqh=getws(resultz);//除法计算后可能的小数位数
35         resultz=clearpoint(resultz,".");//除法运算结果去小数位数
36         lncz=lncz+lnqh;//最后应该保留的小数位数
37         if(lncz>0){//如果要保留的小数位数不够
38             resultz=addwsfront(resultz,lncz);//对计算的结果前补0
39             return Number(resultz.slice(0,-lncz)+"."+resultz.slice(-lncz));
40         }else {//如果要保留的小数位数小于0
41             lncz=Math.abs(lncz);
42             resultz=addwsback(resultz,lncz);//对计算的结果后补0
43             return Number(resultz);
44         }
45         
46     }
47     
48     
49 }
50 //后补0补够位数
51 function addwsback(str,len){
52     for(var i=0;i<len;i++){
53         str=str+"0";
54     }
55     return str;
56 }
57 //前置0补够位数
58 function addwsfront(str,len){
59     var strlen=str.length,
60         cz=len-strlen,
61         returnstr="";
62     if(cz<=0){
63         returnstr=str;
64     } else {
65         for(var i=0;i<cz;i++){
66             str="0"+str;
67         }
68         returnstr=str;
69     }
70     return returnstr;
71 }
72 //取得小数位数
73 function getws(num){
74     try {
75         ln=num.toString().split(".")[1].length;//获取小数位数
76     }catch(e){
77         ln=0;
78     }
79     return ln;
80 }
81 //补全0
82 function getbq(str,len){
83     for(var i=0;i<len;i++){
84         str=str+"0";
85     }
86     return str;
87 }
88 //浮点型数去小数点转字符串
89 function clearpoint(num,str){
90     return num.toString().replace(str,"");
91 }

 muldivfloat(被除数,除数,"/")进行除法计算

 muldivfloat(数字1,数字2,"*")进行乘法计算

结果运行:

返回计算结果

posted @ 2016-10-20 17:06  ^^-^^-  阅读(1779)  评论(1编辑  收藏  举报