Title1

Title2

Title3

6-1 javascript 浮點運算修正

一、程式碼.gs

/* 
* plus (加)
* minus (減)
* times (乘)
* div (除)
*/
function myFunction() {
  var a = 0.1;
  var b = 0.2;
  
  console.log("a=",a);
  console.log("b=",b);
  console.log("a+b=",a+b);  
  console.log("加-plus : a+b=",plus(a,b));
  console.log("減-minus : a-b=",minus(a,b));
  console.log("乘-times : a*b=",times(a,b));
  console.log("除-div : a/b=",div(a,b));  

}

二、numFix.gs
 

/* 
* plus (加)
* minus (減)
* times (乘)
* div (除)
*/

//plus (加)
function plus(n,m){
	n=typeof n =="string"?n:numToString(n);
	m=typeof m =="string"?m:numToString(m);
	var F= n.indexOf(".")!=-1?handleNum(n):[n,0,0],
			S= m.indexOf(".")!=-1?handleNum(m):[m,0,0],
			l1=F[2],
			l2=S[2],
			L=l1>l2?l1:l2,
			T=Math.pow(10,L);
	return (F[0]*T+F[1]*T/Math.pow(10,l1)+S[0]*T+S[1]*T/Math.pow(10,l2))/T
}

//minus (減) 
function minus(n,m){
	n=typeof n =="string"?n:numToString(n);
	m=typeof m =="string"?m:numToString(m);
	var F= n.indexOf(".")!=-1?handleNum(n):[n,0,0],
			S= m.indexOf(".")!=-1?handleNum(m):[m,0,0],
			l1=F[2],
			l2=S[2],
			L=l1>l2?l1:l2,
			T=Math.pow(10,L);
	return (F[0]*T+F[1]*T/Math.pow(10,l1)-S[0]*T-S[1]*T/Math.pow(10,l2))/T
}

//times (乘)
function times(n,m){
	n=typeof n =="string"?n:numToString(n);
	m=typeof m =="string"?m:numToString(m);
	var F= n.indexOf(".")!=-1?handleNum(n):[n,0,0],
			S= m.indexOf(".")!=-1?handleNum(m):[m,0,0],
			l1=F[2],
			l2=S[2],
			L=l1>l2?l1:l2,
			T=Math.pow(10,L);
	return ((F[0]*T+F[1]*T/Math.pow(10,l1))*(S[0]*T+S[1]*T/Math.pow(10,l2)))/T/T
}

//div (除)
function div(n,m){
	n=typeof n =="string"?n:numToString(n);
	m=typeof m =="string"?m:numToString(m);
	var F= n.indexOf(".")!=-1?handleNum(n):[n,0,0],
			S= m.indexOf(".")!=-1?handleNum(m):[m,0,0],
			l1=F[2],
			l2=S[2],
			L=l1>l2?l1:l2,
			T=Math.pow(10,L);
	return ((F[0]*T+F[1]*T/Math.pow(10,l1))/(S[0]*T+S[1]*T/Math.pow(10,l2)))
}

function numToString(tempArray){
	if(Object.prototype.toString.call(tempArray) == "[object Array]"){
			var temp=tempArray.slice();
			for(var i,l=temp.length;i<l;i++){
					temp[i]=typeof temp[i] == "number"?temp[i].toString():temp[i];
			}
			return temp;
	}
	if(typeof tempArray=="number"){
			return tempArray.toString();
	}
	return []
}

function handleNum(n){
	n=typeof n !=="string"?n+"":n;
	var temp= n.split(".");
	temp.push(temp[1].length);
	return temp
}