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

我需要一个JavaScript的logfunction,但它需要以10为基础。我不能看到这个任何列表,所以我假设这是不可能的。 那里有math向导谁知道这个解决scheme吗?

以10为底的对数


由于JavaScript中的Math.log(x)返回Math.log(x)的自然对数(与ln(x)相同),对于基数10,可以除以Math.log(10) (与ln(10)相同):

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

Math.LN10Math.log(10)的内置预计算常量,因此该函数基本上与以下内容相同:

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

很简单,只需通过除以日志(10)来改变基础。 甚至有一个不断的帮助你

 Math.log(num) / Math.LN10; 

这是一样的:

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

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

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

这里的答案会造成明显的精度问题,在某些使用情况下不可靠

 > 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 
 Math.log10 = function(n) { return (Math.log(n)) / (Math.log(10)); } 

那你可以做

 Math.log10(your_number); 

注意:最初我以为要做Math.prototype.log10 = ...做到这一点,但用户CMS指出,math不这样工作,所以我编辑了。 .prototype部分。

 Math.logBase = function(n, base) { return Math.log(n) / Math.log(base); }; 

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 

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

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

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