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;