forked from sheetjs/sheetjs
SheetJS
f335d310ac
- dateNF option for default date format override - general format renders undefined/null as empty string - ignore text elements when searching for decimal point - bubble negative sign to the front when format starts with text - fixes for eslint + closure - updated frac to 1.0.6 Issues: - fixes #10 h/t @adamgundy @SegFaultx64 @RichardCzechowski - fixes #15 h/t @wilg - fixes #25 h/t @dougschiller - fixes #26 h/t @rjmcguire
66 lines
3.0 KiB
JavaScript
66 lines
3.0 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$/)) {
|
|
var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
|
|
var ee = Math.floor(Math.log(Math.abs(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(Math.abs(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*/ {
|
|
if (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {
|
|
return 0;
|
|
}
|
|
return Math.round((val-Math.floor(val))*Math.pow(10,d));
|
|
}
|
|
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); }
|