jQuery rounding number to nearest, flooring or ceiling as expected decimal point

jQuery rounding number to nearest, flooring or ceiling as expected decimal point

by Pritom K Mondal

HTML

<input type='text' name='number' style='width: 150px;' value='10.2345'/>
<input type='text' name='dp' style='width: 50px;' value='2'/>
<input type='button' name='check' value='Check'/>
<div></div>

JavaScript

var div = $("div");
log("---------------------------------------------------------");

$("input[type='button']").click(function() {
    var number = parseFloat($("input[name='number']").val());
    var dp = parseFloat($("input[name='dp']").val());
    if (!isNaN(number) && !isNaN(dp)) {
        var rounded = roundNumber(number, dp * -1);
        var floored = floorNumber(number, dp * -1);
        var ceiled = ceilNumber(number, dp * -1);
        
        log("Original number: " + numberToString(number, dp));
        log("Rounded: " + numberToString(rounded, dp) + 
            ", floored: " + numberToString(floored, dp) + 
            ", ceiled: " + numberToString(ceiled, dp));
        
        log("---------------------------------------------------------");
    }
});
$("input[type='button']").trigger("click");

function roundNumber(value, exp) {
    return decimalAdjust('round', value, exp);
}

function floorNumber(value, exp) {
    return decimalAdjust('floor', value, exp);
}

function ceilNumber(value, exp) {
    return decimalAdjust('ceil', value, exp);
}

function decimalAdjust(type, value, exp) {
    // If the exp is undefined or zero...
    if (typeof exp === 'undefined' || +exp === 0) {
        return Math[type](value);
    }
    value = +value;
    exp = +exp;
    // If the value is not a number or the exp is not an integer...
    if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
        return NaN;
    }
    // Shift
    value = value.toString().split('e');
    value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
    // Shift back
    value = value.toString().split('e');
    return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
}

function log(m) {
    div.prepend(m + "<br/>");
}

function numberToString(number, dp, asDp) {
    var format = '#';
    if (asDp === undefined || asDp == null) {
        asDp = false;
    }
    if (dp !== undefined && dp != null && !isNaN(dp)) {
        if (dp > 9) {
     ...