我需要一个JavaScript的log
函数,但它必须是以10为底数的。我没有找到任何这样的列表,所以我假设这不可能实现。有没有数学巫师知道解决方案?
我需要一个JavaScript的log
函数,但它必须是以10为底数的。我没有找到任何这样的列表,所以我假设这不可能实现。有没有数学巫师知道解决方案?
return Math.log(n) / Math.log(base);
。 - user56reinstatemonica8很简单,只需通过除以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.round(Math.log(1000) / Math.LN10 * 1e6) / 1e6)
- Shane DanielMath.log10 = function(n) {
return (Math.log(n)) / (Math.log(10));
}
那么您可以执行以下操作Math.log10(your_number);
注意: 最初我认为可以通过 Math.prototype.log10 = ...
来实现这个功能,但是用户 CMS 指出了 Math 不支持这种方式,因此我删除了 .prototype
部分。
Math
是一个对象,而不是构造函数,因此它没有 prototype
属性。 - Christian C. Salvadó.prototype
即可 ;) - Christian C. SalvadóFF 25+支持Math.log10
方法。您可以使用polyfill:
if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };
MDN 列出了支持的浏览器。
Desktop Browsers
Chrome Firefox (Gecko) Internet Explorer Opera Safari 38 25 (25) Not supported 25 7.1
Mobile Browsers
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,如果那对您很重要。
最初的回答:
Math.log(x)
本质上就是lnx。function(x){ return Math.log(x)/Math.log(10); }
使用Math.log10()
进行十进制转换。
请参阅文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/log10