2010-03-31 6 views
13

Quelqu'un peut-il s'il vous plaît aidez-moi avec une solution JavaScript/JQuery pour ce problème arithmétique:Math Devise JavaScript

J'ai besoin de soustraire un numéro de l'autre. Le problème est que les nombres ont un signe dollar (parce que son argent), donc jQuery les traite comme des chaînes au lieu de chiffres. J'ai créé deux variables - toalAssets et totalLiabilites. Je voudrais soustraire ce dernier du premier et placer le résultat dans une autre variable appelée netWorth.

Peut-être que j'ai besoin d'utiliser parseFloat()?

Mais je ne suis pas sûr de savoir comment - Tout cela est un peu sur ma tête!

+0

@Mark: il a seulement posé 5 questions et a 36 rep, donc c'est évidemment nouveau sur le site. – DisgruntledGoat

+3

@Jared: Vous pouvez revenir à vos anciennes questions (cliquez sur votre nom d'utilisateur en haut) et accepter les réponses si nécessaire. Plus de personnes seront susceptibles de répondre aux questions futures. – DisgruntledGoat

+0

"Membre depuis 6 mois" –

Répondre

29
var totalLiabilites = '$52.34'; 
var toalAssets  = '$85.12'; 
var pattern   = /[^0-9.-]+/g; 

var result = parseFloat(toalAssets.replace(pattern, '')) - 
      parseFloat(totalLiabilites.replace(pattern, '')); 

// result: 32.78 

Note: En JavaScript, il est recommandé pour gérer l'argent comme un entier représentant le nombre de cents (8512 au lieu de 85,12). Ceci afin d'éviter les problèmes avec l'arithmétique en virgule flottante. 0.1 + 0.2 == 0.3 renvoie false en JavaScript, mais heureusement l'arithmétique entière en virgule flottante est exacte, de sorte que les erreurs de représentation décimales peuvent être évitées par la mise à l'échelle.

Vous pouvez consulter le post suivant pour plus de lire sur ce sujet: Is JavaScript’s math broken?

Vous pouvez toujours appliquer le formatage signe monétaire lorsque les valeurs sont rendus au navigateur.


Douglas Crockford: JavaScript: The Good Parts: Appendix A - Awful Parts (page 105).

+0

Mise à jour de votre motif pour permettre des négatifs. –

+0

@Peter: Merci pour la mise à jour :) –

+0

Merci pour les conseils sur les bonnes pratiques. – Jazzepi

6

parseFloat() ne fonctionnera pas parce que votre chaîne commence par un non-nombre, le signe dollar.

Vous pouvez simplement faire remplacer pour enlever le signe dollar, avec un parseFloat pour obtenir la valeur:

totalAssets = parseFloat(totalAssets.replace('$', '')); 
totalLiabilities = parseFloat(totalLiabilities.replace('$', '')); 

var difference = '$' + (totalAssets - totalLiabilities); 

Ce code remplace vos chaînes originales avec des flotteurs. Vous pouvez également les charger dans de nouvelles variables. De même, la différence ne doit pas nécessairement être précédée du '$'.

1
var a = "$20"; 
var b = "$34"; 
var c = parseFloat(a.replace(/[^0-9\.]+/g, "")) - parseFloat(b.replace(/[^0-9\.]+/g, "")); 
alert(c); 
+0

Daniel - que veut dire ce gobbledegook s'il vous plaît? /[^0-9\.]+/g, "" – swisstony

+0

http://www.regular-expressions.info/reference.html – XGreen