web-dev-qa-db-fra.com

Comment convertir une chaîne en float en JavaScript?

J'essaie d'analyser deux valeurs d'une grille de données. Les champs sont numériques et quand 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?

239
F40

Si elles sont censées être des valeurs séparées, essayez ceci:

var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])

S'ils sont censés être une valeur unique (comme en français, où la moitié est écrit 0,5)

var value = parseFloat("554,20".replace(",", "."));
345
Jesse Rusak

Avez-vous déjà essayé de faire cela? : p

var str = '3.8';ie
alert( +(str) + 0.2 );

+ (chaîne) lancera la chaîne dans float.

Pratique!

Donc, pour résoudre votre problème, vous pouvez faire quelque chose comme ceci:

var floatValue = +(str.replace(/,/,'.'));
51
Stev

Remplacez la virgule par un point.

Cela ne fera que retourner 554:

var value = parseFloat("554,20")

Cela retournera 554.20:

var value = parseFloat("554.20")

Donc à la fin, vous pouvez simplement utiliser:

var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))

N'oubliez pas que parseInt() ne devrait être utilisé que pour analyser des entiers (sans virgule flottante). Dans votre cas, il ne renverra que 554. De plus, appeler parseInt () sur un float ne contournera pas le nombre: il prendra son plancher (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 dans 1.234.567,99, ceux-ci pourraient être éliminés auparavant avec un autre replace:

var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
33
Wadih M.

Si vous étendez un objet String comme ceci ..

String.prototype.float = function() { 
  return parseFloat(this.replace(',', '.')); 
}

.. vous pouvez l'exécuter comme ça

"554,20".float()
> 554.20

fonctionne aussi avec dot

"554.20".float()
> 554.20

typeof "554,20".float()
> "number"
16
sobi3ch

Vous pouvez utiliser cette fonction. Il remplacera les virgules par '', puis analysera la valeur, puis ajustera à nouveau les virgules.

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;
    }
3
Muhammad Bilal

@GusDeCool ou toute autre personne essayant de remplacer plus d'un millier de séparateurs, une façon de le faire consiste à remplacer le regex global: /foo/g. Rappelez-vous simplement que . est un métacaractère, vous devez donc l'échapper ou le mettre entre crochets (\. ou [.]). Voici une option:

var str = '6.000.000';
str.replace(/[.]/g,",");
3
Nick Benes

Essayer

let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);

console.log({float,int});
0
Kamil Kiełczewski

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 le faire. Si vous êtes intéressé, voici: https://github.com/GuillaumeLeclerc/number-parsing

0
DARK_DUCK