var div = $("div");
log("---------------------------------------------------------");
$("input[type='button']").click(function() {
var number = parseFloat($("input[name='number']").val());
var round = parseFloat($("input[name='round']").val());
var dp = parseFloat($("input[name='dp']").val());
if (!isNaN(number) && !isNaN(round) && !isNaN(dp)) {
var nn = roundInterval(number, round, dp, "up");
log("<br/>Rounding: " + numberToString(number, dp, true) +
" using: " + round +
"/" + "<span class='up-down'>Up</span>" +
" as: " + numberToString(nn, dp, true));
var nn = roundInterval(number, round, dp, "down");
log("<br/>Rounding: " + numberToString(number, dp, true) +
" using: " + round +
"/" + "<span class='up-down'>Down</span>" +
" as: " + numberToString(nn, dp, true));
log("---------------------------------------------------------");
}
});
$("input[type='button']").trigger("click");
function roundInterval(number, interval, round, roundType) {
if (round > 9) {
round = 9;
}
else if (round < 0) {
round = 0;
}
number = number > 999999999999999 ? 999999999999999 : number;
var isMinus = false;
if (number < 0) {
isMinus = true;
number = number * -1;
}
number = parseFloat(numberToString(number, round));
interval = parseFloat(numberToString(interval, round));
var multiplier = roundType == 'up' ? Math.ceil(number / interval) : Math.floor(number / interval);
log("Multiplier: " + multiplier);
log("As: " + number + "/" + interval + " :: " + (number/interval));
number = multiplier * interval;
number = multiplier * interval;
if (isMinus) {
number = number * -1;
}
return parseFloat(number.toFixed(round));
}
function numberToString(number, dp, asDp) {
var format = '#';
if (asDp === undefined || asDp == null) {
asDp = false;
}
if (dp !== undefined && dp != null && !isNaN(dp)) {
if (dp > 9) {
dp = 9;
}
}
else {
dp = 0;
}
if (dp > 0 && asDp) {
format += ".";
format += "0000000000".substr(0, dp);
}
else if (dp > 0) {
format += ".";
format += "##########".substr(0, dp);
}
number = number.toString();
var minus = number.substr(0, 1) == '-' ? '-' : '';
var ln = "";
if (number.lastIndexOf("e+") > -1) {
ln = number.substr(0, number.lastIndexOf("e+"));
for (var i = ln.length - 2; i < parseInt(number.substr(number.lastIndexOf("e+") + 1)); i++) {
ln += "0";
}
ln = ln.replace(/[^0-9]/g, '');
number = ln;
}
var tail = format.lastIndexOf('.'), nail = number.lastIndexOf('.');
if (nail < 0 && tail >= 0) {
number = number + "." + format.substr(tail + 1, 1);
nail = number.lastIndexOf('.');
}
tail = tail > -1 && nail > -1 ? format.substr(tail) : '';
var numtail = number.substr(number.indexOf(".") ) ;
if(tail.length > 0 && dp !== undefined && dp > 0) {
tail = tail.substr(0, dp + 1);
var tails = tail.split(''), ntail = "", canPop = true;
for (var i = 1; i < tails.length; i++) {
if ((tails[i] == '#' || tails[i].match(/([0-9])/g)) && numtail.length > i) {
ntail += numtail.substr(i, 1);
}
else if(tails[i] == '#') {
ntail += '0';
}
else {
ntail += tails[i];
}
}
var ttail = ntail.split(''), ptail = tail.substr(1).split('');
for(var i = ttail.length - 1; i > -1; i--){
if (ptail[i] == '#' && canPop && (ttail[i] == '0' || ttail[i] == '#')) {
ntail = ntail.substr(0, ntail.length - 1);
}
else {
canPop = false;
}
}
if (ntail.length > 0) {
tail = "." + ntail;
}
else {
tail = "";
}
}
number = number.replace(/\..*|[^0-9]/g,'').split('');
format = format.replace(/\..*/g,'').split('');
for(var i = format.length - 1; i > -1; i--){
if(format[i] == '#') {
format[i]=number.pop()
}
}
number = minus + number.join('') + format.join('') + tail;
return number;
}
function log(m) {
div.prepend(m + "<br/>");
}