211

我需要一个logJavaScript 函数,但它需要以 10 为基数。我看不到任何列表,所以我假设它是不可能的。是否有任何数学向导知道解决方案?

4

10 回答 10

338

“改变基础”公式/身份

以 10 为底的对数数值可以用以下恒等式计算。

以 10 为底的对数


由于在 JavaScript 中返回(与ln(x)相同)Math.log(x)的自然对数,因此以 10 为底,您可以除以(与ln(10)相同):xMath.log(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);
}
于 2010-06-10T23:33:25.180 回答
67

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

Math.log(num) / Math.LN10;

这与以下内容相同:

Math.log(num) / Math.log(10);
于 2010-06-10T23:35:47.210 回答
53

您可以简单地将值的对数和所需基数的对数相除,也可以覆盖该Math.log方法以接受可选的基数参数:

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

Math.log(5, 10);
于 2010-06-10T23:38:45.793 回答
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
于 2013-06-01T03:20:29.220 回答
16
Math.log10 = function(n) {
    return (Math.log(n)) / (Math.log(10));
}

然后你可以做

Math.log10(your_number);

注意:最初我想这样Math.prototype.log10 = ...做,但用户CMS指出数学不是这样工作的,所以我编辑了这.prototype部分。

于 2010-06-10T23:37:02.480 回答
16
const logBase = (n, base) => Math.log(n) / Math.log(base);

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

于 2014-01-23T10:44:03.100 回答
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
于 2014-08-01T10:48:05.447 回答
2

Math.log10(x)

最佳答案适用于任意基数,但问题是关于以 10 为基数的日志,并且自 2015 年以来Math.log10(x)一直是所有浏览器的标准。 *

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

于 2019-06-03T14:01:49.050 回答
0

以 10 为基数使用Math.log10()

参见文档:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10

于 2020-05-19T17:23:11.263 回答
0

如果你有一个数字 x,那么使用的Math.log(x)本质上就是 lnx。

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

function(x){ return Math.log(x)/Math.log(10); }
于 2016-06-24T03:41:02.627 回答