Voici un scénario simple. Je veux montrer la soustraction de deux valeurs affichées sur mon site:
//Value on my websites HTML is: "75,00"
var fullcost = parseFloat($("#fullcost").text());
//Value on my websites HTML is: "0,03"
var auctioncost = parseFloat($("#auctioncost").text());
alert(fullcost); //Outputs: 75
alert(auctioncost); //Ouputs: 0
Quelqu'un peut-il me dire ce que je fais mal?
C'est "par conception". La fonction parseFloat
ne prend en compte que les parties de la chaîne jusqu'à atteindre un non, un nombre, un exposant ou un point décimal. Une fois qu'il a vu la virgule, il cesse de chercher et ne considère que la partie "75".
Pour résoudre ce problème, convertissez les virgules en points décimaux.
var fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
javascript parseFloat ne prend pas de paramètre de paramètres régionaux. Vous devrez donc remplacer ,
Par .
parseFloat('0,04'.replace(/,/, '.')); // 0.04
parseFloat
analyse en fonction de JavaScript définition d'un littéral décimal , pas la définition de vos paramètres régionaux. (Par exemple, parseFloat
n'est pas sensible à la localisation.) Les littéraux décimaux en JavaScript utilisent .
pour le point décimal.
Pourquoi ne pas utiliser globaliser? Ce n’est que l’un des problèmes que vous pouvez rencontrer lorsque vous n’utilisez pas la langue anglaise:
Globalize.parseFloat('0,04'); // 0.04
Quelques liens sur stackoverflow à examiner:
Comme @JaredPar l'a souligné dans sa réponse , utilisez parseFloat
avec remplacer
var fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
Il suffit de remplacer le comma
par un dot
à moins que ne soit un nombre sur des milliers comme 1.000.000,00
de cette façon, vous obtiendrez le mauvais chiffre. Donc, vous devez remplacer le comma
supprimer le dots
.
// Remove all dot's. Replace the comma.
var fullcost = parseFloat($("#fullcost").text().replace(/\./g,'').replace(',', '.'));
En utilisant deux remplacements, vous serez en mesure de traiter les données sans recevoir de mauvais chiffres dans la sortie.
Les nombres en JS utilisent un .
caractère (point final/point) pour indiquer le point décimal et non un ,
(virgule).
Il est préférable d'utiliser cette syntaxe pour remplacer toutes les virgules dans le cas d'un million 1 234 567
var string = "1,234,567";
string = string.replace(/[^\d\.\-]/g, "");
var number = parseFloat(string);
console.log(number)
Le g
signifie supprimer toutes les virgules.
Vérifiez le démo Jsfiddle ici .