Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialPrakhar Patwa
11,260 Pointsrelated random number quiz (2nd part). what will appear in the console console.log( parseFloat( '.5 hours' ));
ans is 0.5 as i have examined on the console. my question is why it's not a NaN if we use console.log( parseint( '.5 hours' )); it shows NaN.
2 Answers
Iain Simmons
Treehouse Moderator 32,305 PointsBecause parseFloat
is designed to read the period/dot as the decimal point and use that to determine the value. parseInt
on the other hand, treats the dot as a non-numerical character and will exit and return whatever number it has found before it comes across it, which in your example, didn't exist, so it returns NaN
.
I think if you had any number before the dot for parseInt
it would return that (including zero).
Justin Black
24,793 PointsJavaScript provides two methods for converting non-number primitives into numbers: parseInt() and parseFloat() . As you may have guessed, the former converts a value into an integer whereas the latter converts a value into a floating-point number. Any number literal contained in a string is also converted correctly, so the string "0xA" is properly converted into the number 10. However, the string "22.5" will be converted to 22 , because the decimal point is an invalid character for an integer. Some examples:
var iNum1 = parseInt("1234blue"); //returns 1234
var iNum2 = parseInt("0xA"); //returns 10
var iNum3 = parseInt("22.5"); //returns 22
var iNum4 = parseInt("blue"); //returns NaN
The parseInt() method also has a radix mode, allowing you to convert strings in binary, octal, hexadecimal, or any other base into an integer. The radix is specified as a second argument to parseInt() , so a call to parse a hexadecimal value looks like this:
var iNum1 = parseInt("AF", 16); //returns 175
Of course, this can also be done for binary, octal, and even decimal (which is the default mode):
var iNum1 = parseInt("10", 2); //returns 2
var iNum2 = parseInt("10", 8); //returns 8
var iNum2 = parseInt("10", 10); //returns 10
If decimal numbers contain a leading zero, itβs always best to specify the radix as 10 so that you wonβt accidentally end up with an octal value. For example:
var iNum1 = parseInt("010"); //returns 8
var iNum2 = parseInt("010", 8); //returns 8
var iNum3 = parseInt("010", 10); //returns 10
In this code, both lines are parsing the string "010" into a number. The first line thinks that the string is an octal value and parses it the same way as the second line (which specifies the radix as 8). The last line specifies a radix of 10, so iNum3 ends up equal to 10.
Another difference when using parseFloat() is that the string must represent a floating-point number in decimal form, not octal or hexadecimal. This method ignores leading zeros, so the octal number 0908 will be parsed into 908 , and the hexadecimal number 0xA will return NaN because x isnβt a valid character for a floating-point number. There is also no radix mode for parseFloat() .
Some examples of using parseFloat() :
var fNum1 = parseFloat("1234blue"); //returns 1234.0
var fNum2 = parseFloat("0xA"); //returns NaN
var fNum3 = parseFloat("22.5"); //returns 22.5
var fNum4 = parseFloat("22.34.5"); //returns 22.34
var fNum5 = parseFloat("0908"); //returns 908
var fNum6 = parseFloat("blue"); //returns NaN
Hope this helps.
So, in the example of 0.5, parseInt(".5") returns NaN because . ( period ) is NaN
Prakhar Patwa
11,260 PointsPrakhar Patwa
11,260 Pointsthank you lain