JSFiddle - React, Tailwind, and code Playground
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Generated number:</div>
<div id="generatedNumber"></div>
<div>Desired output:</div>
<div id="desiredOutput"></div>
JavaScript
function generateNum() {
var genNumber;
function randomRange(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
do {
genNumber = Math.random() * Math.pow(10, randomRange(-5, 5));
} while (genNumber < 1E-05 || genNumber === 0);
return genNumber;
}
function getRoundedSFs(num, SFCount) {
// This runs a regex to match every "leading zeros" before and after the .
// For the record, it splits before and after in two groups, if necessary...
var matches = num.toString().match(/^-?(0+)\.(0*)/);
if (matches) { // if we found at least a "0."
var firstIndex = matches[0].length;
var prefix = matches[0];
sf = Number(num.toString().substring(firstIndex, firstIndex + SFCount + 1));
sf = Math.round(sf / 10);
sf = prefix + sf.toString();
return Number(sf).toFixed(matches[2].length+SFCount);//matches[;
}
else { // possible float not starting with 0. like -5.574487436097115
// matching before and after, no matter if 0 or not
matches = num.toString().match(/^(-?(\d+))\.(\d+)/);
// Rounding at good index
var decimalShift = SFCount - matches[2].length;
var rounded = Math.round(num * Math.pow(10, decimalShift));
rounded /= Math.pow(10, decimalShift);
return rounded.toFixed(decimalShift);
}
}
var generatedNumber = generateNum();
var roundedSF = 5; // <-- Change this number according to your buttons
var desiredOutput = getRoundedSFs(generatedNumber, roundedSF);
document.getElementById('generatedNumber').innerHTML = generatedNumber;
document.getElementById('desiredOutput').innerHTML = desiredOutput;