1. 程式人生 > >JS數字太大計算不精準的問題解決思路記錄

JS數字太大計算不精準的問題解決思路記錄

問題描述:在做專案的過程中,遇到數字很大的時候,相加的數字總是轉為整數,例如14位整數加4位小數的數字相加99999999999999.9999+99999999999999.9999,得出的結果為200000000000000,於是乎為了解決這個問題,我寫了以下方法。
思路:通過擷取數字的方式實現。大體就是整數和整數相加,小數和小數相加,然後進行字串拼接
步驟:
比如1.55+2.66
(1)首先擷取小數點前面的整數進行相加得到s1(1+2=3),然後擷取小數點後面的數字相加得到s2(55+66=121)
(2)s2 除以 10^小數的位數得到s3(121/10^2 = 1.21)
(3)然後通過split再對s3進行分割,分割成s4(1) 和  s5(21)
(4)最後通過s1和s3相加然後字串拼接上小數點和s5,最終結果result = (s1+s3)+ '.' + s5   (即3+1+'.'+21 = 4.21)
貼上程式碼,僅供參考,如有不對的地方,望指出~

function sum(arr,index){//arr  陣列      index 整數,小數的位數
//debugger;
var result = 0,integer = 0,decimal = 0,decimalInt = 0,decimalDec = 0,tmpDecimal;
for (var i = 0; i < arr.length; i++) {
if(arr[i].indexOf('.')>0){
var tempArr = arr[i].split(".");
integer += Number(tempArr[0]);
decimal += Number('0.'+tempArr[1])*Math.pow(10,index);
}else{
integer += Number(arr[i]);
}
}
tmpDecimal = (decimal/Math.pow(10,index)).toString().split('.');
decimalInt = Number(tmpDecimal[0]);
if(tmpDecimal.length == 2){
decimalDec = tmpDecimal[1];
result = (integer+decimalInt)+'.'+decimalDec;
}else{
result = integer+decimalInt;
}
return result;
}
console.log(sum(['99999999999999.9999','99999999999999.9999'],4));