## How can I specify the base for Math.log() in JavaScript?

I need a log function for JavaScript, but it needs to be base 10. I can’t see any listing for this, so I’m assuming it’s not possible. Are there any math wizards out there who know a solution for this?

## Solutions/Answers:

### Solution 1:

**“Change of Base” Formula / Identity**

The numerical value for logarithm to the base 10 can be calculated

with the following identity.

Since `Math.log(x)`

in JavaScript returns the natural logarithm of `x`

(same as *ln(x)*), for base 10 you can divide by `Math.log(10)`

(same as *ln(10)*):

```
function log10(val) {
return Math.log(val) / Math.LN10;
}
```

`Math.LN10`

is a built-in precomputed constant for `Math.log(10)`

, so this function is essentially identical to:

```
function log10(val) {
return Math.log(val) / Math.log(10);
}
```

### Solution 2:

Easy, just change the base by dividing by the log(10). There is even a constant to help you

```
Math.log(num) / Math.LN10;
```

which is the same as:

```
Math.log(num) / Math.log(10);
```

### Solution 3:

You can simply divide the logarithm of your value, and the logarithm of the desired base, also you could override the `Math.log`

method to accept an optional base argument:

```
Math.log = (function() {
var log = Math.log;
return function(n, base) {
return log(n)/(base ? log(base) : 1);
};
})();
Math.log(5, 10);
```

### Solution 4:

the answer here would cause obvious precision problem and is not reliable in some use cases

```
> Math.log(10)/Math.LN10
1
> Math.log(100)/Math.LN10
2
> Math.log(1000)/Math.LN10
2.9999999999999996
> Math.log(10000)/Math.LN10
4
```

### Solution 5:

```
Math.log10 = function(n) {
return (Math.log(n)) / (Math.log(10));
}
```

Then you can do

```
Math.log10(your_number);
```

**NOTE:** Initially I thought to do `Math.prototype.log10 = ...`

to do this, but user CMS pointed out that Math doesn’t work this way, so I edited out the `.prototype`

part.

### Solution 6:

```
const logBase = (n, base) => Math.log(n) / Math.log(base);
```