2015-05-21 15 views
5

Sto cercando di aggiungere quanto segue, ma continua a concatenare e restituire una stringa.addizione JavaScript/ciclo somma

var nums = [1.99, 5.11, 2.99]; 

    var total = 0; 

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

Sì, ho bisogno di restituirlo/aggiungerlo con i decimali. Non so cosa fare

+3

'.toFixed' restituisce una stringa, quindi si sta facendo' 0 + "1.99" + "5.11" + "2.99" '. Invece, aggiungili prima tutti, poi * quando mostri il risultato * usa 'toFixed'. – Amadan

+0

Penso che tu abbia appena ricevuto l'ordine sbagliato e che intendevi fare 'parseFloat (String (i) .toFixed (2));' –

+0

@Amadan dovresti dare una risposta. Sembra il più completo di tutto ciò che viene detto qui. – Soana

risposta

4

Se non si memorizzano stringhe di float, non è necessario utilizzare parseFloat (i), che analizza un float da una stringa. Si potrebbe riscrivere questo come:

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); 

o

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

Chiama 'toFixed (2)' alla fine. – Barmar

+1

'nums [i]' dentro 'forEach' deve essere' i' solo come primo argomento è l'elemento corrente in forEach – bugwheels94

+1

È necessario assegnare il risultato di 'toFixed 'a una variabile. – Barmar

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

    var total = 0; 

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

Sì, con i decimali

7

Se si voleva un approccio più funzionale, si potrebbe anche usare Array.reduce:

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

L'ultimo parametro 0, è un valore iniziale opzionale.

+0

È possibile evitare di passare '0' come secondo argomento. – Pavlo

+1

@Pavlo: Grazie, ho aggiornato la mia risposta con un link ai documenti e una nota su come '0' è facoltativo. Tuttavia, in genere includo il valore iniziale opzionale per rendere l'output delle mie chiamate 'reduce' più facile da ragionare. –

1

Prova ridurre, un'opzione ricorsiva:

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]);