forked from sheetjs/sheetjs
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| function write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{
 | |
| 	var idx = fmt.length - 1;
 | |
| 	while(fmt.charCodeAt(idx-1) === 44) --idx;
 | |
| 	return write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));
 | |
| }
 | |
| function write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{
 | |
| 	var o/*:string*/;
 | |
| 	var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
 | |
| 	if(fmt.match(/^#+0.0E\+0$/)) {
 | |
| 		if(val == 0) return "0.0E+0";
 | |
| 		else if(val < 0) return "-" + write_num_exp(fmt, -val);
 | |
| 		var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
 | |
| 		var ee = Math.floor(Math.log(val)*Math.LOG10E)%period;
 | |
| 		if(ee < 0) ee += period;
 | |
| 		o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
 | |
| 		if(o.indexOf("e") === -1) {
 | |
| 			var fakee = Math.floor(Math.log(val)*Math.LOG10E);
 | |
| 			if(o.indexOf(".") === -1) o = o.charAt(0) + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
 | |
| 			else o += "E+" + (fakee - ee);
 | |
| 			while(o.substr(0,2) === "0.") {
 | |
| 				o = o.charAt(0) + o.substr(2,period) + "." + o.substr(2+period);
 | |
| 				o = o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");
 | |
| 			}
 | |
| 			o = o.replace(/\+-/,"-");
 | |
| 		}
 | |
| 		o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; });
 | |
| 	} else o = val.toExponential(idx);
 | |
| 	if(fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0,o.length-1) + "0" + o.charAt(o.length-1);
 | |
| 	if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
 | |
| 	return o.replace("e","E");
 | |
| }
 | |
| var frac1 = /# (\?+)( ?)\/( ?)(\d+)/;
 | |
| function write_num_f1(r/*:Array<string>*/, aval/*:number*/, sign/*:string*/)/*:string*/ {
 | |
| 	var den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);
 | |
| 	var myn = (rr - base*den), myd = den;
 | |
| 	return sign + (base === 0 ? "" : ""+base) + " " + (myn === 0 ? fill(" ", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + "/" + r[3] + pad0(myd,r[4].length));
 | |
| }
 | |
| function write_num_f2(r/*:Array<string>*/, aval/*:number*/, sign/*:string*/)/*:string*/ {
 | |
| 	return sign + (aval === 0 ? "" : ""+aval) + fill(" ", r[1].length + 2 + r[4].length);
 | |
| }
 | |
| var dec1 = /^#*0*\.([0#]+)/;
 | |
| var closeparen = /\)[^)]*[0#]/;
 | |
| var phone = /\(###\) ###\\?-####/;
 | |
| function hashq(str/*:string*/)/*:string*/ {
 | |
| 	var o = "", cc;
 | |
| 	for(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {
 | |
| 		case 35: break;
 | |
| 		case 63: o+= " "; break;
 | |
| 		case 48: o+= "0"; break;
 | |
| 		default: o+= String.fromCharCode(cc);
 | |
| 	}
 | |
| 	return o;
 | |
| }
 | |
| function rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return ""+(Math.round(val * dd)/dd); }
 | |
| function dec(val/*:number*/, d/*:number*/)/*:number*/ {
 | |
| 	var _frac = val - Math.floor(val), dd = Math.pow(10,d);
 | |
| 	if (d < ('' + Math.round(_frac * dd)).length) return 0;
 | |
| 	return Math.round(_frac * dd);
 | |
| }
 | |
| function carry(val/*:number*/, d/*:number*/)/*:number*/ {
 | |
| 	if (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {
 | |
| 		return 1;
 | |
| 	}
 | |
| 	return 0;
 | |
| }
 | |
| function flr(val/*:number*/)/*:string*/ {
 | |
| 	if(val < 2147483647 && val > -2147483648) return ""+(val >= 0 ? (val|0) : (val-1|0));
 | |
| 	return ""+Math.floor(val);
 | |
| }
 |