# Understanding JavaScript's parseInt: Why Does It Print "5"?

Written on

## Chapter 1: The Mystery of parseInt

Have you ever wondered why parseInt(0.0000005) in JavaScript outputs "5"? At first glance, this seems puzzling, as one might expect a result of 0. Let's delve into the reasoning behind this behavior together.

### Section 1.1: When to Use parseInt

The parseInt function is primarily employed to convert strings into integers. To better understand its functionality, let’s examine how it operates in different scenarios.

#### Subsection 1.1.1: Understanding parseInt

According to the MDN documentation, the parseInt(string, radix) function takes a string as an argument and returns an integer based on the specified radix (base). Here’s how you might typically call this function:

parseInt(string)

parseInt(string, radix)

**Examples:**

parseInt('0.5') // 0

parseInt('0.05') // 0

parseInt('0.005') // 0

parseInt('0.0005') // 0

parseInt('0.00005') // 0

parseInt('0.000005') // 0

parseInt('015') // 15

parseInt('015', 8) // 13

parseInt('15px', 10) // 15

### Section 1.2: The Mechanics of parseInt

How does parseInt handle numbers when the first argument is a numeric value? This is where the surprising output of parseInt(0.0000005) comes into play.

**Step 1: String Conversion**

When parseInt receives a number, it first converts it to a string. For instance:

String(0.5); // => '0.5'

String(0.0000005); // => '5e-7' (This is crucial!)

**Step 2: Parsing the String**

As discussed by SeyyedKhandon on Stack Overflow, parseInt(0.0000005) effectively evaluates to parseInt('5e-7'). The function only interprets the leading characters that resemble an integer, ignoring the remaining parts:

parseInt('5e-7') // 5

Thus, it returns 5 because that is the only valid integer character before the non-numeric 'e'.

## Chapter 2: Safely Obtaining the Integer Part

To safely extract the integer portion of a floating-point number, consider using the Math.floor() function instead:

Math.floor(0.5); // => 0

Math.floor(0.0000005); // => 0

This method provides a more predictable output.

**Curiosity Corner:**

Can you explain why parseInt(99999999999999999999999999) returns 1?

In closing, I appreciate your time in exploring this topic with me, and I look forward to sharing more insightful articles in the future.