2015-11-02 62 views
0

我的腳本:爲什麼我的JavaScript爲Math.log返回一個不正確的值?

var dblTemp = 365 * 24 * 60 * 60 * 12000000000; //378432000000000000 

return Math.log(dblTemp); 

我的期望值是~17.5779878529829。我通過使用我的Windows計算器來得到這個,輸入378432000000000000,然後按log函數。

如果我運行我的腳本,它將返回~40.47481279510905

我是不是正確使用Math.log?爲什麼我的javascript爲Math.log返回不正確的值?

+1

要提防溢出,做Math.log10(365)+ Math.log10(24)+ Math.log10(60)+ Math.log10(60)+數學。 log10(12000000000)更好 – juvian

回答

1

您的計算器會計算出的底數10的對數。 Math.log計算base e的對數。

如果你想在相同的結果你的計算器,用Math.log10

var dblTemp = 365 * 24 * 60 * 60 * 12000000000; //378432000000000000 
 

 
document.write(Math.log10(dblTemp));

如果您運行時不支持Math.log10可以define the function yourself

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

Math.LN10受所有瀏覽器支持。

+0

有沒有其他選擇使這個IE兼容? – CIA

+0

不是邊緣;所以,比IE11更老的東西。 'Math.LN10'在我的IE版本上也不支持。我想我通過創建一個函數來代替'Math.log10','return Math.log(x)/ 2.302585092994046'找到了替代方法。 – CIA

+0

我忘了'log10'是ES6。查看更新後的答案。 – joews

0

因爲Math.log()使用的基數爲e,而您的計算器使用的是基數10。所以,你要使用Math.log10

return Math.log10(dblTemp); // 17.577987852982993 
相關問題