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: " +...