J'essaie d'analyser deux valeurs d'une grille de données. Les champs sont numériques et lorsqu'ils ont une virgule (ex. 554,20), je ne peux pas obtenir les chiffres après la virgule. J'ai essayé parseInt
et parseFloat
. Comment puis-je faire ceci?
J'essaie d'analyser deux valeurs d'une grille de données. Les champs sont numériques et lorsqu'ils ont une virgule (ex. 554,20), je ne peux pas obtenir les chiffres après la virgule. J'ai essayé parseInt
et parseFloat
. Comment puis-je faire ceci?
Réponses:
S'ils sont censés être des valeurs distinctes, essayez ceci:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
S'ils sont censés être une seule valeur (comme en français, où la moitié est écrite 0,5)
var value = parseFloat("554,20".replace(",", "."));
+(string)
au lieu de ce parseString(string)
qui est suggéré par @Stev ci-dessous. Donc, le premier exemple serait v1 = +(values[0]); v2 = +(values[1]);
.
6.000.000
. Fonction remplacer uniquement remplacer le premier séparateur de virgules
Avez-vous déjà essayé de faire cela? : p
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (chaîne) convertira la chaîne en flottant.
Pratique!
Donc, pour résoudre votre problème, vous pouvez faire quelque chose comme ceci:
var floatValue = +(str.replace(/,/,'.'));
+(str)
solution - parseFloat
ignore les caractères invalides après le nombre, +(str)
retourne NaN
dans ces cas, ce qui est exactement ce dont j'ai besoin.
Remplacez la virgule par un point.
Cela ne retournera que 554:
var value = parseFloat("554,20")
Cela retournera 554.20:
var value = parseFloat("554.20")
Donc au final, vous pouvez simplement utiliser:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
N'oubliez pas que cela parseInt()
ne doit être utilisé que pour analyser des entiers (pas de virgule flottante). Dans votre cas, il ne renverra que 554. De plus, appeler parseInt () sur un flottant ne arrondira pas le nombre: il prendra son étage (entier inférieur le plus proche).
Exemple étendu pour répondre à la question de Pedro Ferreira à partir des commentaires:
Si le champ de texte contient des milliers de points de séparation comme 1.234.567,99
ceux-ci, ils pourraient être éliminés au préalable avec un autre replace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
Si vous étendez un objet String comme ceci ..
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
.. vous pouvez l'exécuter comme ceci
"554,20".float()
> 554.20
fonctionne aussi avec dot
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool ou quelqu'un d' autre d' essayer de remplacer plus d'un séparateur de milliers, une façon de le faire est un remplacement global regex: /foo/g
. N'oubliez pas qu'il .
s'agit d'un métacaractère, vous devez donc y échapper ou le mettre entre crochets ( \.
ou [.]
). Voici une option:
var str = '6.000.000';
str.replace(/[.]/g,",");
Vous pouvez utiliser cette fonction. Il remplacera les virgules par '' et ensuite il analysera la valeur et ensuite il ajustera à nouveau les virgules en valeur.
function convertToFloat(val) {
if (val != '') {
if (val.indexOf(',') !== -1)
val.replace(',', '');
val = parseFloat(val);
while (/(\d+)(\d{3})/.test(val.toString())) {
val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
}
}
return val;
}
J'ai eu le même problème sauf que je ne savais pas à l'avance quels étaient les séparateurs de milliers et le séparateur décimal. J'ai fini par écrire une bibliothèque pour ce faire. Si cela vous intéresse ici c'est: https://github.com/GuillaumeLeclerc/number-parsing
Essayer
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});