ParseInt Fails on Small Numbers
A while ago I was trying to get the floor of a number using parseInt()
in a Node.js app.
The specific use case was expected to return 0, but a larger integer was returned
instead. I opened up the node REPL to test out the behaviour of parseInt()
and it
turns out that when working with very small or very large numbers parseInt()
breaks.
Check out the sample below.
// Define very small number var small = 5 / 1000000000; // 5e-9 // parseInt() with radix of 10 var parseIntResult = parseInt(small, 10); // Math.floor() to compare with var floorResult = Math.floor(small); console.log("parseInt: " + parseIntResult); console.log("Math.floor: " + floorResult); // Some more examples console.log("3e-9: " + parseInt(3e-9, 10)); console.log("7e-9: " + parseInt(7e-9, 10)); /** OUTPUT **/ // // parseInt: 5 // Math.floor: 0 // 3e-9: 3 // 7e-9: 7
As you can see from this result, parseInt()
is operating on the scientific notation
version of the number rather than the actual value. However, Math.floor()
produces
the correct result. So, be careful using parseInt()
as it can lead to very
unexpected bugs.
If you enjoyed this tutorial, please consider sponsoring my work on GitHub 🤗