6
votes

JavaScript: Pourquoi cela produit-il et string laid ??? Je voudrais la monnaie

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);
I am trying to loop through some text boxes and sum up their values. This produces a nasty string. What am I missing?? if I put 8 in the first textbox total text ends up as "  08.000.000.000.00". What am I doing wrong? I would like to format as currency but if not, at least just a two decimal number. Any pointers?

2 commentaires

Ce que j'ai tendance à faire, c'est toujours faire des mathématiques comme des flotteurs ou des INT, en gardant les sources comme elles sont pour toutes les opérations futures. J'ai ensuite un prototype codé. Money (Currencysign) qui est utilisé uniquement pour l'affichage des résultats à l'utilisateur final, mais pas dans aucune opération de mathématique - génère une chaîne.


String.pototype.tomoney = fonction () {retour "$" + ceci; } var montant = TOTAL.TOFIXED (2) .Tomoney (); $ (". Total"). Texte (montant); Doux!!! Fonctionne parfaitement!


3 Réponses :


13
votes

.tofixed convertit l'objet d'un numéro à une chaîne.

laissez les valeurs complètes en place et convertissez uniquement en utilisant .tofixed à l'extrémité xxx

alternativement , reconsverrez la chaîne en un numéro. xxx


1 commentaires

++ m'a sauvé, j'appliquais .tofixed (2) pour flotter mais qui le convertit en chaîne et lors de l'ajout avec un + j'ai 5 + 5 = 55 au lieu de 5 + 5 = 10. :) Merci.



1
votes

Just Fyi, il existe un excellent plugin d'agrégation mathématique pour JQuery: JQuery Calculement

Utilisation de ce plug-in peut également résoudre indirectement votre problème. P>

IT EU L'utilisation réduirait votre script à: p>

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


0 commentaires

0
votes

Vous convertissez le parsefloat en une chaîne, puis l'ajoutez au total. Ajoutez uniquement .tofixed (2) à la dernière ligne, une fois que des choses ont été ajoutées.

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


0 commentaires