The mistery behind parseInt(0.0000005)
The parseInt function produces an integral number dictated by the interpretation of the contents of the string argument according to the specified radix.
A bit of background
The parseInt() method parses a value as a string and returns the first integer.
A radix parameter specifies the number system to use (2 = binary, 10 = decimal, 16 = hexadecimal).
If radix is omitted, JavaScript assumes a radix of 10. If the value begins with 0x, it will assume radix 16.
The return type of parseInt is integer or NaN.
If not NaN, the return value will be the integer that is the first argument taken as a number in the specified radix.
If parseInt encounters a character that is not a numeral in the specified radix, it ignores it and all succeeding characters.
Solving the mistery...
Reading through the ECMAScript 2021 we'll see this:
When
parseIntfunction is called, the following steps are taken:
- Let
inputStringbe ?ToString(string)- Let
Sbe !TrimString(inputString, start)- ...
I'll leave the rest of the steps to your discretion to read.
So let's look again at what parseInt(numericalString) does with its first argument: if it's not a string, then it is converted to a string, then parsed and if it encounters a character that is not a numeral - it ignores it and all succeeding characters
In our case, String(0.0000005) === "5e-7" and considering the above mentions, the return value of parseInt("5e-7") is 5
Conclusion
parseInt is a function that parses numerical strings to integers and you must be careful when trying to extract the integer part of a float.
A cool challenge before my next JavaScript post:
Can you explain why parseInt(999999999999999999999) equals 1?
Write your considerations in the comments section below!