JS中的一些方法的积累

1、js中浮点数加减乘除的运算丢失精度的解决方法

// 两个浮点数求和  
    function Add(num1,num2){  
       var r1,r2,m;  
       try{  
           r1 = num1.toString().split('.')[1].length;  
       }catch(e){  
           r1 = 0;  
       }  
       try{  
           r2=num2.toString().split(".")[1].length;  
       }catch(e){  
           r2=0;  
       }  
       m=Math.pow(10,Math.max(r1,r2));  
       // return (num1*m+num2*m)/m;  
       return Math.round(num1*m+num2*m)/m;  
    }  
      
    // 两个浮点数相减  
    function sub(num1,num2){  
       var r1,r2,m;  
       try{  
           r1 = num1.toString().split('.')[1].length;  
       }catch(e){  
           r1 = 0;  
       }  
       try{  
           r2=num2.toString().split(".")[1].length;  
       }catch(e){  
           r2=0;  
       }  
       m=Math.pow(10,Math.max(r1,r2));  
       n=(r1>=r2)?r1:r2;  
       return (Math.round(num1*m-num2*m)/m).toFixed(n);  
    }  
    // 两数相除  
    function division(num1,num2){  
       var t1,t2,r1,r2;  
       try{  
           t1 = num1.toString().split('.')[1].length;  
       }catch(e){  
           t1 = 0;  
       }  
       try{  
           t2=num2.toString().split(".")[1].length;  
       }catch(e){  
           t2=0;  
       }  
       r1=Number(num1.toString().replace(".",""));  
       r2=Number(num2.toString().replace(".",""));  
       return (r1/r2)*Math.pow(10,t2-t1);  
    }  
    // 两数相乘   
    function mul(num1,num2){  
       var m=0,s1=num1.toString(),s2=num2.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);  
    }  

2、js中清除数组中的所有空值

//例如有一个数组
var khxbmList = [""];
khxbmList = (5) ["", "100892503994368", "110533522780160", "110931373486080", "5339913785344"]
//进行清除空值
	//去除数组里面的空值 
	for(var i=0;i<khxbmList.length;i++){
		  if(khxbmList[i] == "" || typeof(khxbmList[i]) == "undefined")  
	        {  
			  khxbmList.splice(i,1);  
	            i= i-1;  
	        }  
	}
//得到数组
khxbmList = (4) ["100892503994368", "110533522780160", "110931373486080", "5339913785344"]

3、获取table中的值放在数组里

        var rybhyz=new Array();
	$("table[name='BZ1'] tbody tr").find("td:eq(0) input[type='hidden']").each(function(j,val){
		rybhyz.push($(this).val());
	});	

4、加密和解码BASE64 以及获取网址参数的方法

//测试
//1.加密 
var str = '中文内容'; 
var base = new Base64(); 
var result = base.encode(str); 
alert(result ); 
//2.解密 
var data1=b64DecodeUnicode(result);//第一种方式
var data2 = base.decode(result); //第二种方式
alert(data1);
alert(data2);


//实战
    var param=ep.databasepoints.getRequest().cpparams;//网址中获取的参数
	var base = new Base64(); //调用方法
	var year="";
	var obj = JSON.parse(base.decode(param)); //调用方法,并将json参数转换为json对象
	var datas=obj.paramtype2;
	for (var i=0;i<datas.length;i++){
		if(JSON.parse(datas[i]).name=='NF'){
			year=JSON.parse(datas[i]).value;
		}
	}

//获取网址参数
ep.databasepoints.getRequest=function() {
	  var url = location.href; //获取url中"?"符后的字串
	  var theRequest = new Object();
	  if (url.indexOf("?") != -1) {
	    var str = url.substr(1);
	    strs = str.split("&");
	    for(var i = 0; i < strs.length; i ++) {
	       
	      theRequest[strs[i].split("=")[0]]=decodeURI(strs[i].split("=")[1]);
	       
	    }
	  }
	  return theRequest;
}

//解密方法 1

function b64DecodeUnicode(str) {
    return decodeURIComponent(atob(str).split('').map(function(c) {
        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
    }).join(''));
}

//解密与解密的封装方法 2
function Base64() { 
	// private property 
	 _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 
	  
	 // public method for encoding 
	 this.encode = function (input) { 
	  var output = ""; 
	  var chr1, chr2, chr3, enc1, enc2, enc3, enc4; 
	  var i = 0; 
	  input = _utf8_encode(input); 
	  while (i < input.length) { 
	   chr1 = input.charCodeAt(i++); 
	   chr2 = input.charCodeAt(i++); 
	   chr3 = input.charCodeAt(i++); 
	   enc1 = chr1 >> 2; 
	   enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
	   enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
	   enc4 = chr3 & 63; 
	   if (isNaN(chr2)) { 
	    enc3 = enc4 = 64; 
	   } else if (isNaN(chr3)) { 
	    enc4 = 64; 
	   } 
	   output = output + 
	   _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + 
	   _keyStr.charAt(enc3) + _keyStr.charAt(enc4); 
	  } 
	  return output; 
	 } 
	  
	 // public method for decoding 
	 this.decode = function (input) { 
	  var output = ""; 
	  var chr1, chr2, chr3; 
	  var enc1, enc2, enc3, enc4; 
	  var i = 0; 
	  input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 
	  while (i < input.length) { 
	   enc1 = _keyStr.indexOf(input.charAt(i++)); 
	   enc2 = _keyStr.indexOf(input.charAt(i++)); 
	   enc3 = _keyStr.indexOf(input.charAt(i++)); 
	   enc4 = _keyStr.indexOf(input.charAt(i++)); 
	   chr1 = (enc1 << 2) | (enc2 >> 4); 
	   chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
	   chr3 = ((enc3 & 3) << 6) | enc4; 
	   output = output + String.fromCharCode(chr1); 
	   if (enc3 != 64) { 
	    output = output + String.fromCharCode(chr2); 
	   } 
	   if (enc4 != 64) { 
	    output = output + String.fromCharCode(chr3); 
	   } 
	  } 
	  output = _utf8_decode(output); 
	  return output; 
	 } 
	  
	 // private method for UTF-8 encoding 
	 _utf8_encode = function (string) { 
	  string = string.replace(/\r\n/g,"\n"); 
	  var utftext = ""; 
	  for (var n = 0; n < string.length; n++) { 
	   var c = string.charCodeAt(n); 
	   if (c < 128) { 
	    utftext += String.fromCharCode(c); 
	   } else if((c > 127) && (c < 2048)) { 
	    utftext += String.fromCharCode((c >> 6) | 192); 
	    utftext += String.fromCharCode((c & 63) | 128); 
	   } else { 
	    utftext += String.fromCharCode((c >> 12) | 224); 
	    utftext += String.fromCharCode(((c >> 6) & 63) | 128); 
	    utftext += String.fromCharCode((c & 63) | 128); 
	   } 
	  
	  } 
	  return utftext; 
	 } 
	  
	 // private method for UTF-8 decoding 
	 _utf8_decode = function (utftext) { 
	  var string = ""; 
	  var i = 0; 
	  var c = c1 = c2 = 0; 
	  while ( i < utftext.length ) { 
	   c = utftext.charCodeAt(i); 
	   if (c < 128) { 
	    string += String.fromCharCode(c); 
	    i++; 
	   } else if((c > 191) && (c < 224)) { 
	    c2 = utftext.charCodeAt(i+1); 
	    string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); 
	    i += 2; 
	   } else { 
	    c2 = utftext.charCodeAt(i+1); 
	    c3 = utftext.charCodeAt(i+2); 
	    string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 
	    i += 3; 
	   } 
	  } 
	  return string; 
	 } 
	 } 

5、DataTable重新绘制

 $(".dataTables_scrollBody table").DataTable().draw();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值