Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

toFixed method without rounding to five digit

I have a number var x = 2.305185185185195;

x = x.toFixed(5);

x = 2.30519 but I require this without rounding i.e. 2.30518

I read some thread with two decimal places but could not find for five decimal places.

Any help would be appreciated.

like image 881
Akki619 Avatar asked Apr 26 '16 10:04

Akki619


3 Answers

You can use an apropriate factor and floor it and return the result of the division.

Basically this solution moves the point to the left with a factor of 10^d and gets an integer of that and divided the value with the former factor to get the right digits.

function getFlooredFixed(v, d) {
    return (Math.floor(v * Math.pow(10, d)) / Math.pow(10, d)).toFixed(d);
}

var x = 2.305185185185195;

document.write(getFlooredFixed(x, 5));
like image 98
Nina Scholz Avatar answered Sep 27 '22 19:09

Nina Scholz


If you need only a "part" of a number with a floating point without rounding, you can just "cut" it:

function cutNumber(number, digitsAfterDot) {
    const str = `${number}`;

    return str.slice(0, str.indexOf('.') + digitsAfterDot + 1);
}

const x = 2.305185185185195;

console.log(cutNumber(x, 5)); // 2.30518

This method is fast (https://jsfiddle.net/93m8akzo/1/) and its execution time doesn't depend on number or digitsAfterDot values.

You can also "play around" with both functions in a given fiddle for a better understanding of what they do.


You can read more about slice() method here - MDN documentation


NOTE This function is only an example, don't use it in production applications. You should definitely add input values validation and errors handling!

like image 24
Andrew Evt Avatar answered Sep 27 '22 18:09

Andrew Evt


The Math.trunc() function returns the integer part of a number by removing any fractional digits

So you can multiply the number by 10^n where n is the desired number of precision, truncate the decimal part using Math.trunc(), divide by the same number (10^n) and apply toFixed() to format it (in order to get the form of 2.30 instead of 2.3 for example)

var x = 2.305185185185195;

console.log((Math.trunc(x*100000)/100000).toFixed(5));
like image 24
Addis Avatar answered Sep 27 '22 17:09

Addis