Comment convertir une chaîne en float en JavaScript?

J'essaie d'analyser deux valeurs à partir d'un datagrid.
Les champs sont numériques, et quand ils ont une virgule (ex. 554,20), Je ne peux pas obtenir les nombres après la virgule.
J'ai essayé parseInt et parseFloat. Comment puis-je faire cela?

215
demandé sur Brett DeWoody 2009-03-13 16:17:20

7 réponses

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 écrite 0,5)

var value = parseFloat("554,20".replace(",", "."));
313
répondu Jesse Rusak 2009-06-30 11:26:18

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

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

+ (string) convertira la chaîne en float.

Pratique!

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

var floatValue = +(str.replace(/,/,'.'));
45
répondu Stev 2011-04-14 20:38:50

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, à la fin, vous pouvez simplement utiliser:

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

N'oubliez pas que parseInt() ne doit être utilisé que pour analyser des entiers (pas de points flottants). Dans votre cas, il ne retournera 554. De plus, appeler parseInt () sur un float n'arrondira pas le nombre: il prendra son étage (entier inférieur le plus proche).


Exemple étendu pour répondre à Pedro Ferreira question des commentaires:

Si le champ de texte contient des points de séparateur de milliers comme dans 1.234.567,99 Ceux-ci pourraient être éliminés au préalable avec un autre replace:

var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
28
répondu Wadih M. 2018-03-28 17:46:33

Si vous étendez l'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"
15
répondu sobi3ch 2012-07-13 21:29:27

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

var str = '6.000.000';
str.replace(/[.]/g,",");
3
répondu Nick Benes 2014-01-13 22:19:36

Vous pouvez utiliser cette fonction. Il remplacera les virgules par '' et ensuite il parseFlaot la valeur et après cela il ajustera à nouveau les virgules dans la 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;
    }
3
répondu Muhammad Bilal 2016-02-25 08:56:48

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 vous êtes intéressé ici, il est: https://github.com/GuillaumeLeclerc/number-parsing

0
répondu DARK_DUCK 2015-05-03 21:50:31