2017-07-27 34 views
0

如何獲得精確的整數結果乘法分區在JS中的巨大數字的操作?如何獲得精確的整數結果的算術運算在JS中的巨大數字?

比方說,我們有:

var a = 75643564363473453456342378564387956906736546456235342; 
var b = 34986098309687982743378379458582778387652482; 

乘以這些數字讓我在科學的「E」表示的數字。如何顯示整個精確的整數結果數字?

我已經使用這個庫試圖 https://github.com/peterolson/BigInteger.js

自述說:

注意:Java語言的數字大於和 小於-9007199254740992沒有精確表示 數字和將不會產生確切的結果。如果您正在處理該範圍之外的 數字,最好傳遞字符串。

但你怎麼用字符串做數學?

+0

爲什麼你需要這樣一個精確的數字? – ItamarG3

回答

3

使用bigInt,正如您所暗示的,您需要使用字符串而不是數字來正確表示它們。

bigInt("75643564363473453456342378564387956906736546456235342").multiply("34986098309687982743378379458582778387652482"); 
+0

謝謝。但它返回一個數組,你能否告訴如何使它成爲一個字符串? '.join(「」)'拋出一個錯誤'result.join不是一個函數'如果我嘗試加入包含該操作的變量'var result' – Un1

+1

使用.toString()這一點在自述文件中有很好的解釋。 – Salketer

+0

這完全成了另一個問題......「如何使BigInteger能夠以浮點數工作?」我很抱歉,但我無法回答。 – Salketer

-1

我認爲這個問題是重複的how-to-avoid-scientific-notation-for-large-numbers-in-javascript

從上面的鏈接採取了此功能。

function toFixed(x) { 
if (Math.abs(x) < 1.0) { 
var e = parseInt(x.toString().split('e-')[1]); 
if (e) { 
    x *= Math.pow(10,e-1); 
    x = '0.' + (new Array(e)).join('0') + x.toString().substring(2); 
    } 
} else { 
var e = parseInt(x.toString().split('+')[1]); 
if (e > 20) { 
    e -= 20; 
    x /= Math.pow(10,e); 
    x += (new Array(e+1)).join('0'); 
} 
} 
return x; 
} 

alert(toFixed(a*b)); 
+0

這並沒有解決精度問題。 –