JavaScript, rounding number after decimal
30/09/2015
etc
Given that, you have to work with many decimal number for example: 0.335, 0.345,
0.2, 96.6666. And then you want to round those number 2 digits after decimal.
The most general way is to used toFix()
. However, the behavior of toFix()
is
not good. Let test with value 0.335
and 0.345
.
0.335.toFix(2) --> 0.33, we expected 0.33
0.345.tiFix(2) --> 0.35, we expected 0.34 FAIL!!!
The better solution is that, we try to use the first two digit after decimal, the only issue is that, these two digit up/down are depend on the third digit, perhaps the fifth one. Number 44 is to solve this issue. Any number x.a-b-c-d
which has c-d
>= 56, the b
will be round up by one.
var num = 0.335
var numX10000 = num * 10000; --> 3350
var Math.floor((numX10000 + 44) / 100) --> 3350 + 44 = 3394, floor of 3394/100 = 33
var num = 0.345
var numX10000 = num * 10000; --> 3450
var Math.floor((numX10000 + 44) / 100) --> 3450 + 44 = 3494, floor of 3494/100 = 34
A good solution come up with a compact function which can help you use in any time.
function long_round_number(number, digit){
var multiplier = Math.pow(10, digit + 2);
var multiple_number = Math.floor(number * multiplier)
var roundup_number = multiple_number + 44;
var return_value = Math.floor(roundup_number / 100) / Math.pow(10, digit)
return return_value;
}
function roundNumber(number, digit){
var multiplier = Math.pow(10, digit + 2);
var new_number = Math.floor(multiplier * number) + 44;
return Math.floor(new_number / 100) / Math.pow(10, digit);
}