2009-07-31 15 views
6
var total = 0; 
     $(".amount").each(function() { 
      var value = $(this).val(); 
      value = (value.length < 1) ? 0 : value; 
      var tmp = parseFloat(value).toFixed(2); 
      total += tmp; 
     }); 
     $(".total").text(total); 

Sto provando a scorrere alcune caselle di testo e riassumere i loro valori. Questo produce una brutta stringa. Cosa mi manca ?? se inserisco 8 nella prima casella di testo, il testo totale diventa "08.000.000.000.00". Che cosa sto facendo di sbagliato? Vorrei formattare come valuta ma, in caso contrario, almeno un numero di due cifre decimali. Qualche indicazione?Javascript: perché questo produce e brutto stringa ??? Vorrei valuta

Grazie, ~ ck a San Diego

+0

quello che tendo a fare è sempre fare matematica come float o ints, mantenendo le fonti come sono per eventuali operazioni future. Poi ho un prototipo codificato .money (currencySign) che viene utilizzato esclusivamente per la visualizzazione dei risultati all'utente finale ma non in tutte le operazioni matematiche - emette una stringa. –

+0

String.prototype.toMoney = function() { return "$" + this; } var amount = total.toFixed (2) .toMoney(); $ (". Totale"). Testo (importo); Dolce !!! Funziona perfettamente! – Hcabnettek

risposta

13

.toFixed converte l'oggetto da un numero in una stringa.

Lasciare i valori completi sul posto e convertire solo utilizzando .toFixed proprio alla fine

$(".total").text(total.toFixed(2)); 

In alternativa, convertire la stringa di nuovo ad un numero.

total = total + + tmp; 
+0

++ mi ha salvato, stavo applicando '.toFixed (2)' per fare il float ma lo ho convertito in stringa e quando aggiungevo con uno '+' ho ottenuto 5 + 5 = 55 invece di 5 + 5 = 10. :) Grazie. – rmagnum2002

1

Proprio A proposito, c'è un ottimo plug-in di aggregazione matematico per jQuery: jQuery Calculation

Utilizzando questo plug-in può anche indirettamente risolvere il tuo problema.

utilizzo di Sarebbe ridurre il vostro script per:

$('.total').text($('.amount').sum()); 
0

si sta convertendo il parseFloat in una stringa, quindi aggiungerla al totale. Aggiungi una volta .toFixed (2) alla riga finale, una volta che le cose sono state aggiunte.

var total = 0; 
$(".amount").each(function() { 
    var value = $(this).val(); 
    value = (value.length < 1) ? 0 : value; 
    var tmp = parseFloat(value); 
    total += tmp; 
}); 
$(".total").text(total).toFixed(2); 
Problemi correlati