最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript, parseInt behavior when passing in a float number - Stack Overflow

matteradmin9PV0评论

I have the following two parseInt() and I am not quite sure why they gave me different results:

alert(parseInt(0.00001)) shows 0;

alert(parseInt(0.00000001)) shows 1

My guess is that since parseInt needs string parameter, it treats 0.00001 as ""+0.00001 which is "0.00001", therefore, the first alert will show 0 after parseInt. For the second statement, ""+0.00000001 will be "1e-8", whose parseInt will be 1. Am I correct?

Thanks

I have the following two parseInt() and I am not quite sure why they gave me different results:

alert(parseInt(0.00001)) shows 0;

alert(parseInt(0.00000001)) shows 1

My guess is that since parseInt needs string parameter, it treats 0.00001 as ""+0.00001 which is "0.00001", therefore, the first alert will show 0 after parseInt. For the second statement, ""+0.00000001 will be "1e-8", whose parseInt will be 1. Am I correct?

Thanks

Share Improve this question edited Apr 19, 2014 at 20:58 AlliceSmash asked Apr 19, 2014 at 20:49 AlliceSmashAlliceSmash 7272 gold badges12 silver badges19 bronze badges 6
  • Always add a radix, parseInt(0.00001, 10) – adeneo Commented Apr 19, 2014 at 20:52
  • Your question is confusing. You first said that the first alert shows 0.00001, but then you said it shows 0. It shows 0 for me. – Barmar Commented Apr 19, 2014 at 20:54
  • Seems like you're on the right track: String(0.00000001) --> "1e-8" and parseInt("1e-8"); -> 1 – Andrew Commented Apr 19, 2014 at 20:56
  • Barmar: you are right, the first alert shows 0. Sorry about that – AlliceSmash Commented Apr 19, 2014 at 20:57
  • 1 @Alnitak:I am not trying to use parseInt to round a number. I was reading JQuery Types documentation and noticed parseInt( 0.000001) returns 1 and I did not understand. That is why I tried to use different values to figure out why. But thanks for pointing this out so others will be aware. – AlliceSmash Commented Apr 19, 2014 at 21:18
 |  Show 1 more ment

3 Answers 3

Reset to default 9

I believe you are correct.

parseInt(0.00001) == parseInt(String(0.00001)) == parseInt('0.00001') ==> 0

parseInt(0.00000001) == parseInt(String(0.00000001)) == parseInt('1e-8') ==> 1

You are correct.

parseInt is intended to get a number from a string. So, if you pass it a number, it first converts it into a string, and then back into a number. After string conversion, parseInt starts at the first number in the string and gives up at the first non-number related character. So "1.e-8" bees "1"

If you know you are starting with a string, and are just trying to get an Integer value, you can do something like.

Math.round(Number('0.00000001')); // 0

If you know you have a floating point number and not a string...

Math.round(0.00000001); // 0

You can also truncate, ceil(), or floor the number

parseInt takes each character in the first argument (converted to a string) that it recognizes as a number, and as soon as it finds a non-numeric value it ignores that value and the rest of the string. (see MDN second paragraph under "Description")

Therefore it's likely that parseInt(0.00000001) === parseInt(String(0.00000001)) === parseInt("1e-8"), which would only extract the 1 from the string yielding parseInt("1") === 1

However, there's another possibility:

From Mozilla developer network: parseInt(string, radix);

for the string argument (emphasis added): "The value to parse. If string is not a string, then it is converted to one. Leading whitespace in the string is ignored."

I think this possibility is less likely, since String(0.00000001) does not yield NAN.

Articles related to this article

Post a comment

comment list (0)

  1. No comments so far