I tried using this:
//var value = "39.99";
//var value = "0.255";
var list = ["39.99", "0.255", "0.306", "0.645", "2.505", "5.726", "9.649", "9.999", "10.01", "0.155", "0.355", "10.05", "14.75", "14.02", "2.405", "14.54","2.485"];
var result;
for( i in list ){
//result = processRounding(parseFloat(list[i]).toFixed(3));
//result = parseFloat(list[i]).toFixed(2);
result = test(parseFloat(list[i]).toFixed(3), 2);
console.log("RESULT["+i+"]: "+ format("#,##0.00", result));
}
function test(value, precision) {
var precision = precision || 0,
neg = value < 0,
power = Math.pow(10, precision),
value = Math.round(value * power),
integral = String((neg ? Math.ceil : Math.floor)(value / power)),
fraction = String((neg ? -value : value) % power),
padding = new Array(Math.max(precision - fraction.length, 0) + 1).join('0');
return precision ? integral + '.' + padding + fraction : integral;
}
function processRounding (value){
//console.log( Math.ceil(value*100) + " " + Math.ceil(value*100) / 2);
var remainder = parseFloat(value % 1).toFixed(2);
var floor = parseInt(Math.floor(value));
console.log(floor + " " + remainder);
if(Math.floor(value) != 0 && Math.floor(value) > 10){
if( parseFloat(remainder) > 0.50 || parseFloat(remainder) > 0.05 ){
console.log("CEIL");
value = Math.ceil(value*10)/10;
}else{
value = value;
}
}else{
if( parseFloat(remainder) > 0.50 || parseFloat(remainder) > 0.05 ){
console.log("ROUND");
value = Math.round(value*100)/100;
}else{
value = value;
}
}
return value;
}
But the problem I see is that when the value is something like "2.405"
what it does is simple make it "2.40" regardless if I use either the function test
or the function processRounding
in my jsfiddle example.
Any Ideas on how to make the result into 2.41? Technically It should round up right since the last digit is "5".
UPDATE
using result = test(parseFloat(list[i]).toFixed(3), 2);
var list = ["39.99", "0.255", "0.306", "0.645", "2.505", "5.726", "9.649", "9.999", "10.01", "0.155", "0.355", "10.05", "14.75", "14.02", "2.405", "14.54","2.485"];
would result to this :
RESULT[0]: 39.99
RESULT[1]: 0.26
RESULT[2]: 0.31
RESULT[3]: 0.65
RESULT[4]: 2.51
RESULT[5]: 5.73
RESULT[6]: 9.65
RESULT[7]: 10.00
RESULT[8]: 10.01
RESULT[9]: 0.16
RESULT[10]: 0.36
RESULT[11]: 10.05
RESULT[12]: 14.75
RESULT[13]: 14.02
RESULT[14]: 2.40
RESULT[15]: 14.54
RESULT[16]: 2.49
Notice that in the list there is a "2.405" value which in the result[14] it is "2.40" it should be in 2.41 right?