Created
June 10, 2020 01:54
-
-
Save djD-REK/068cba3d430cf7abfddfd32a5d7903c3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
console.log(Number(Math.round(1.005 + "e2") + "e-2")) // 1.01 | |
const roundAccurately = (number, decimalPlaces) => Number(Math.round(number + "e" + decimalPlaces) + "e-" + decimalPlaces) | |
console.log(roundAccurately(1.005, 2)) // 1.01 |
@DoctorDerek Thank you so much! This makes a lot more sense now
@hamidgasmi Nope! JavaScript's built-in math isn't great if you actually need precision or are working with exponential notation. I'd recommend using a library. MathJS is a good place to start. https://mathjs.org/
great, thanks.
very helpful.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The lower case e is exponential notation, so 10 to the power of positive 2 or minus 2.
Since the built-in rounding function only works on the first decimal place, you can move the decimal point (with the e notation), round, and move the decimal point back.
I'd recommend trying each piece of the code individually, reading the docs on Math.round, and just completely avoiding this use case if it doesn't make sense to you.
Again, the "right" solution here would be to use something more robust. Math.round(1.005) is 1, not 1.01 or 1.0 as you might expect. @y-a11y