2015-05-21 101 views
5

我試圖添加以下內容,但它保持連接並返回一個字符串。JavaScript添加/彙總循環

var nums = [1.99, 5.11, 2.99]; 

    var total = 0; 

    nums.forEach(function(i) { 
     total += parseFloat(i).toFixed(2); 
    }); 

是的,我需要它返回/與小數添加。不確定要做什麼

+3

'.toFixed'返回一個字符串,所以你在做'0 + 「1.99」 + 「5.11」 + 「2.99」 '。相反,首先將它們全部添加,然後在顯示結果時*使用'toFixed'。 – Amadan

+0

我認爲你剛剛得到錯誤的命令,並打算做'parseFloat(String(i).toFixed(2));' –

+0

@Amadan你應該從中做出答案。這似乎是這裏所說的最完整的一切。 – Soana

回答

4

如果您不存儲浮動字符串,則不需要使用parseFloat(i),它解析字符串中的浮動。你可以重寫此爲:

var nums = [1.99, 5.11, 2.99]; 

var total = 0; 

nums.forEach(function(i) { 
    total += i; 
}); 

var fixed = total.toFixed(2); 
console.log(fixed); 

var nums = [1.99, 5.11, 2.99]; 

var total = 0; 

for(var i = 0; i < nums.length; i++){ 
    total += nums[i]; 
} 

var fixed = total.toFixed(2); 
console.log(fixed); 
+0

在末尾調用'toFixed(2)'。 – Barmar

+1

'forEach'裏面的'nums [i]'必須是'i',因爲第一個參數是forEach中的當前元素 – bugwheels94

+1

您需要將'toFixed'的結果賦值給一個變量。 – Barmar

1
var nums = [1.99, 5.11, 2.99]; 

    var total = 0; 

    nums.forEach(function(i) { 
     total += parseFloat(i); 
    }); 
    alert(total.toFixed(2)); 

是的,它與小數

7

如果你想要一個更實用的方法,你也可以使用Array.reduce

var nums = [1.99, 5.11, 2.99]; 
var sum = nums.reduce(function(prev, cur) { 
    return prev + cur; 
}, 0); 

最後一個參數0,是一個可選的起始值。

+0

您可以避免將'0'作爲第二個參數傳遞。 – Pavlo

+1

@Pavlo:謝謝,我用文檔鏈接更新了我的答案,以及有關'0'是可選的註釋。不過,我通常會包含可選的起始值,以使我的「reduce」調用的輸出更易於推理。 –

1

儘量減少,遞歸選項:

function sum(inputNums) { 
 
     var nums = inputNums; 
 
     var total = nums.reduce(function(previousValue, currentValue, index, array) { 
 
     return previousValue + currentValue; 
 
     }); 
 
     alert('' + total); 
 
    } 
 
    sum([1.99, 5.11, 2.99]);