如何在 JavaScript 中指定 Math.log() 的基数?

问题描述 投票:0回答:10

我需要一个用于 JavaScript 的

log
函数,但它需要以 10 为基数。我看不到任何相关列表,所以我假设这是不可能的。有没有数学奇才知道这个问题的解决方案?

javascript math logarithm
10个回答
352
投票

“改变碱基”公式/身份

可以计算以10为底的对数的数值 具有以下身份。

Logarithm for base 10


由于 JavaScript 中的

Math.log(x)
返回
x
的自然对数(与 ln(x) 相同),因此以 10 为底,您可以除以
Math.log(10)
(与 ln(10) 相同):

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

Math.LN10
Math.log(10)
的内置预计算常量,因此该函数本质上与:

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

71
投票

很简单,只需除以 log(10) 即可更改底数。甚至还有一个常数可以帮助你

Math.log(num) / Math.LN10;

等同于:

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

55
投票

您可以简单地将值的对数与所需底数的对数相除,也可以重写

Math.log
方法以接受可选的底数参数:

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

Math.log(5, 10);

27
投票
const logBase = (n, base) => Math.log(n) / Math.log(base);

https://en.wikipedia.org/wiki/Logarithm#Change_of_base


17
投票

这里的答案会导致明显的精度问题,并且在某些用例中不可靠

> 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

16
投票
Math.log10 = function(n) {
    return (Math.log(n)) / (Math.log(10));
}

那么你可以做

Math.log10(your_number);

注意: 最初我想这样做

Math.prototype.log10 = ...
来做到这一点,但用户 CMS 指出数学不能这样工作,所以我编辑掉了
.prototype
部分。


9
投票

FF 25+ 支持

Math.log10
方法。你可以使用polyfill:

if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };

MDN 列出了支持的浏览器

桌面浏览器

Chrome    Firefox (Gecko) Internet Explorer   Opera   Safari
38        25 (25)         Not supported       25      7.1

移动浏览器

Android         Chrome for Android    Firefox Mobile (Gecko)  IE Mobile      Opera Mobile    Safari Mobile
Not supported   Not supported         25.0 (25)               Not supported  Not supported   iOS 8

2
投票

Math.log10(x)

最上面的答案对于任意基数都可以,但问题是关于对数基数 10,并且

Math.log10(x)
自 2015 年以来一直是所有浏览器的标准。*

*IE 除外,如果出于某种原因这对您很重要的话。


0
投票

如果你有一个数字 x,那么使用

Math.log(x)
本质上就是 lnx。

要将其转换为 e 以外的基数,您可以使用以下函数:

function(x){ return Math.log(x)/Math.log(10); }

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.