JavaScript 小数运算处理方法

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			/**
			 *JavaScript在处理小数的时候会存在不准确的问题;
			  解决的方法可以是:将小数变为整数来处理。
			  https://www.jb51.net/article/47803.htm 
			*/
		   
			/**
			 *  https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/pow
			    Math.max(value1[,value2, ...]) 
			    参数:value1, value2, ...一组数值
			    返回值:返回给定的一组数字中的最大值。
			    如果给定的参数中至少有一个参数无法被转换成数字,则会返回 NaN。
			    如果没有参数,则结果为 - Infinity
			
				Math.pow() 函数返回基数(base)的指数(exponent)次幂;
				Math.pow(base, exponent) 表示base的exponent次方;
				参数:base基数;exponent 指数;
				如果 base 是 2 ,且 exponent 是 7,
				则 Math.pow() 函数返回 128 (2 的 7 次幂)
			*/
	    /**
		 * 加法 
		 * 计算方式:1.先将所有的小数乘为整数;
			        2.待加减运算执行完之后再除去对应的 m 的值,将其变为小数输出;
		 * */
		function accAdd(arg1,arg2){
			var r1,r2,m;
			//获取arg1,arg2的小数点后的长度;
			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 m.div(parseFloat(arg1).mul(m)+parseFloat(arg2).mul(m))
			 **/
			return (arg1*m+arg2*m)/m;
		}
		/**
		  * 给Number类型增加一个add方法,调用起来更加方便。
		  *
		  * */
		Number.prototype.add = function (arg){
				return accAdd(arg,this);
		}
		/**
		 * 减法
		 **/
		function accsub(arg1,arg2){
			return accAdd(arg1,-arg2);
		}
		/**
		 * 乘法 
		 * */
		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)
		}
		/**
		 *  给Number类型增加一个mul方法,调用起来更加方便。
		 **/
		Number.prototype.mul = function (arg){
				return accMul(arg, this);
		}
		/**
		 * 除法 
		 * */
		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 (r1/r2)*pow(10,t2-t1);
			}
		}
	  /**
		* 给Number类型增加一个div方法,调用起来更加 方便。
		* */
		Number.prototype.div = function (arg){
		return accDiv(this, arg);
		}
		/**
		 *  toFixed()实现方法可把 Number 四舍五入为指定小数位数的数字。
		  * */
		Number.prototype.toFixed=function(len){
			var tempNum=0;
			var s;
			var s1=this+"";
			var start=s1.indexOf(".");
			if(s1.substr(start+len+1,1)>=5){
				tempNum=1
			}
			var temp=Math.pow(10,len);
			s=Math.floor(Math.round(this*temp));
			return s/temp
		};
		
		/**
		 * https://blog.csdn.net/luxxxx/article/details/90177682
		 */
		/**
		 * trim() 方法用于删除字符串的头尾空格
		 * \s匹配任何不可见字符,包括空格、制表符、换页符等等。
		 * 等价于[ \f\n\r\t\v]
		 *   \f: 匹配一个换页符。等价于\x0c和\cL。
		 *   \n: 匹配一个换行符。等价于\x0a和\cJ。
		 *   \r: 匹配一个回车符。等价于\x0d和\cM。
		 *   \t: 匹配一个制表符。等价于\x09和\cI。
		 *   \v: 匹配一个垂直制表符。等价于\x0b和\cK。
		 * */
		String.prototype.trim=function(){			
			return this.replace(/(^\s*)|(\s*$)/g,"")
		};
		
		//https://www.cnblogs.com/xinggood/p/6639022.html
		console.log("JS加法(0.1+0.2):"+(0.1+0.2));
		var sum=0.1.add(0.2);
		console.log("处理过的结果:"+sum);
		console.log("JS减法(0.3-0.1):"+(0.3-0.1));
		console.log("处理后的结果:"+accsub(0.3,0.1));
		console.log("JS乘法(8.80*12):"+(8.80*12));
		console.log("处理后的结果:"+8.80.mul(12));
		console.log("JS除法"+(100/2));
		/**此处需要转型原因待研究**/
		console.log("处理后的结果:"+parseFloat(100).div(parseFloat(2)));	
	    //trim();
		var str="    wang tao  ";
		console.log(str.trim());
		console.log("        hello     world           ".trim());
		//toFixed()
		console.log(57.4553.toFixed(3));
		
		</script>
	</head>
	<body>
	</body>
</html>
发布了189 篇原创文章 · 获赞 11 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_29393273/article/details/100154990