我需要一个用于 JavaScript 的
log
函数,但它需要以 10 为基数。我看不到任何相关列表,所以我假设这是不可能的。有没有数学奇才知道这个问题的解决方案?
很简单,只需除以 log(10) 即可更改底数。甚至还有一个常数可以帮助你
Math.log(num) / Math.LN10;
等同于:
Math.log(num) / Math.log(10);
您可以简单地将值的对数与所需底数的对数相除,也可以重写
Math.log
方法以接受可选的底数参数:
Math.log = (function() {
var log = Math.log;
return function(n, base) {
return log(n)/(base ? log(base) : 1);
};
})();
Math.log(5, 10);
const logBase = (n, base) => Math.log(n) / Math.log(base);
这里的答案会导致明显的精度问题,并且在某些用例中不可靠
> 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 指出数学不能这样工作,所以我编辑掉了 .prototype
部分。
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
Math.log10(x)
最上面的答案对于任意基数都可以,但问题是关于对数基数 10,并且
Math.log10(x)
自 2015 年以来一直是所有浏览器的标准。*
*IE 除外,如果出于某种原因这对您很重要的话。
如果你有一个数字 x,那么使用
Math.log(x)
本质上就是 lnx。
要将其转换为 e 以外的基数,您可以使用以下函数:
function(x){ return Math.log(x)/Math.log(10); }
对于基数 10 使用
Math.log10()
。
请参阅文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10