# Round to the left most digit

It’s probably unusual for me to write anything about Math. I hated math and I failed the subject all the time. But I got pretty excited when I knew this trick from my colleague. I also asked this question at stackoverflow.

### The problem

Let’s say you have a number `423`

and you want to round the number to the nearest left-most digit which in this case it’s `4`

. If you want to round to the left-most digit it’s going to be `400`

.

### The solution

The solution is quiet simple. You just need to get the place value of the number, take the number in question divided by the place value and `floor`

the number then multiply the result with the place value again. That’s it! Simple right?

So, the place value of `423`

is `100`

.

\begin{align} \frac{423}{100} \end{align}

which you will get `4.23`

. The you `floor`

the number

```
Math.floor(4.23); // 4
```

And then you multiple `4`

with `100`

to get the rounded number.

\begin{align} {400}\cdot{100} = {400} \end{align}

The problem is how are we going to get the `place value`

of the number?

You want logarithm.

The idea of this is to reverse the operation of exponentiation. For example, the `log10`

of `423`

is `2.62634036738`

then `10^2.62634036738`

equals `423`

. But you want the place value. You would need to round the `2.62634036738`

which is going to be `2`

then `10^2`

is `100`

. There! you get the place value of the `4`

.

\begin{align} d = \lfloor\frac{n}{10^{\lfloor\log_{10} n \rfloor}} \rfloor \cdot 10^{\lfloor\log_{10} n\rfloor} \end{align}

### Show me the code

```
n = 423
d = Math.floor(Math.log10(n))
Math.floor(n / Math.pow(10, d)) * Math.pow(10, d) // 400
```

Til next time,

noppanit
at 17:30