我正在寫一個應該做權力的函數,但只顯示指定的最後n位數。它的工作很棒......主要是。由於某些原因,當我指定了我想要的最後幾位數字時,它一直工作到包括數字12在內.12以上的任何數字似乎給我一個非常奇怪的數字。我知道我必須錯過一些明顯的東西,但我真的沒有看到它。獲取大數的最後13位數
下面是代碼:
function power(base, exponent, digits) {
total = base;
for(i = 1; i < exponent; i++) {
total = total * base;
if(total.toString().length > digits) {
total = total.toString().substr(total.toString().length - digits, digits);
}
}
return total;
}
所以,對於一些例子(顯示12個數字,下正常工作):
如果我做電力(999,999,1)我結束了=> 9
如果我做電源(999,999,5)我最終=> 98999
如果我做電源(999,999,12)我最終=> 000499998999
這裏是它開始搞亂:
如果我做電源(999,999,13)我最終=> 5710054009000
如果我做電源(999,999,14)餘結束'='79077027006000'
起初我以爲我打了某種整數限制和科學記數法是搞砸了,但我不認爲是這樣,因爲它應該工作到20位數字。
我懷疑這是我在減少if語句中的字符串的方式有問題。但我不確定爲什麼它不會搞亂13位數以下的計算。
謝謝!
你知道IEEE 794浮點是如何工作的嗎? – Pointy 2012-07-14 04:07:05
我有一些想法。但我不認爲它會失去13位數的精確度。我的功能背後的想法是永遠不要讓它與高數字一起工作。它從不乘以任何高於第13位的數字。 – renosis 2012-07-14 04:25:26
@renosis 13位數字乘以3位數字是(最多)16位數字。雙精度浮點數只能精確到15位數。 – 2012-07-14 05:57:10