Exponential to Decimal
by Nico D
JavaScript
/*function precise(x) {
const xStr = `${x}`;
const eInd = xStr.indexOf("e");
let precision = null;
if (eInd > -1) {
const xLen = xStr.length;
const precisionStr = xStr.substr(eInd + 1, xLen - eInd);
precision = Number.parseInt(precisionStr);
if (precision > 0 && precision <= 20) {
return Number.parseFloat(Number.parseFloat(x).toPrecision(precision));
} else if (precision >= -6 && precision <= 0) {
return Number.parseFloat(Number.parseFloat(x).toPrecision(Math.abs(precision)));
}
}
return Number.parseFloat(x);
}*/
function precise(x, maxDecimals = null) {
const data = String(x).split(/[eE]/);
if (data.length === 1) {
return data[0];
}
let z = "";
const sign = x < 0 ? "-" : "";
const str = data[0].replace(".", "");
let mag = Number(data[1]);
if (mag < 0) {
mag++;
z = sign + "0.";
while (mag++) {
z += "0";
}
z = z + str.replace(/^\-/, "");
if (maxDecimals !== null) {
z = z.substr(0, maxDecimals + 2);
}
return z;
}
if (mag >= str.length) {
mag++;
mag -= str.length;
while (mag--) {
z += "0";
}
return str + z;
}
if (mag > 0 && mag <= str.length + 1) {
const str = data[0].replace(".", "");
if (mag < str.length - 1) {
return [str.slice(0, mag + 1), ".", str.slice(mag + 1)].join('');
}
return str;
}
return data[0];
}
console.log("---------");
console.log("TEST");
//console.log(precise(123.456));
//console.log(precise(0.004));
console.log(precise('1e+3', 13));
console.log(precise('1e+2', 13));
console.log(precise('1e+1', 13));
console.log(precise('1e0', 13));
console.log(precise('1e-1', 13));
console.log(precise('1e-2', 13));
console.log(precise('1e-3', 13));
console.log(precise('1.23e+5', 13));
console.log(precise('1.23e+4', 13));
console.log(precise('1.23e+3', 13));
console.log(precise('1.23e+2', 13));
console.log(precise('1.23e+1', 13));
console.log("0: " +...