[英]How can I specify the base for Math.log() in JavaScript?
我需要一個用於 JavaScript 的log
函數,但它需要以 10 為基數。我看不到任何列表,所以我假設這是不可能的。 是否有任何數學奇才知道解決方案?
很簡單,只需通過除以 log(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
const logBase = (n, base) => Math.log(n) / Math.log(base);
Math.log10 = function(n) {
return (Math.log(n)) / (Math.log(10));
}
然后你可以做
Math.log10(your_number);
注意:最初我想用Math.prototype.log10 = ...
來做這個,但是用戶CMS指出 Math 不能這樣工作,所以我編輯了.prototype
部分。
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
Math.log10(x)
! 😁
最佳答案適用於任意基數,但問題是關於以 10 為基數的日志, 自 2015 年以來, Math.log10(x)
已成為所有瀏覽器的標准。 *
*除了 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.