The mistery behind parseInt(0.0000005)
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
parseInt
function is called, the following steps are taken:
- Let
inputString
be ?ToString(string)
- Let
S
be !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!