Supprimer les virgules de la chaîne à l'aide de JavaScript

94

Je souhaite supprimer les virgules de la chaîne et calculer ces montants à l'aide de JavaScript.

Par exemple, j'ai ces deux valeurs:

  • 100 000,00
  • 500 000,00

Maintenant, je veux supprimer les virgules de cette chaîne et je veux le total de ces montants.

Kanak Vaghela
la source

Réponses:

169

Pour supprimer les virgules, vous devrez utiliser replacesur la chaîne. Pour convertir en flottant afin de pouvoir faire le calcul, vous aurez besoin de parseFloat:

var total = parseFloat('100,000.00'.replace(/,/g, '')) +
            parseFloat('500,000.00'.replace(/,/g, ''));
seul jour
la source
3
Oui, besoin de combiner replaceet parseFloat. voici un cas de test rapide: jsfiddle.net/TtYpH
Shadow Wizard is Ear For You
1
Nous sommes en 2017, n'y a-t-il aucun moyen d'aller vers et depuis une chaîne de paramètres régionaux? Comment inversez-vous cette fonction? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… . Publié une question distincte ici: stackoverflow.com/questions/41905406/…
Costa
3

Réponse connexe, mais si vous souhaitez exécuter le nettoyage d'un utilisateur en saisissant des valeurs dans un formulaire, voici ce que vous pouvez faire:

const numFormatter = new Intl.NumberFormat('en-US', {
  style: "decimal",
  maximumFractionDigits: 2
})

// Good Inputs
parseFloat(numFormatter.format('1234').replace(/,/g,"")) // 1234
parseFloat(numFormatter.format('123').replace(/,/g,"")) // 123

// 3rd decimal place rounds to nearest
parseFloat(numFormatter.format('1234.233').replace(/,/g,"")); // 1234.23
parseFloat(numFormatter.format('1234.239').replace(/,/g,"")); // 1234.24

// Bad Inputs
parseFloat(numFormatter.format('1234.233a').replace(/,/g,"")); // NaN
parseFloat(numFormatter.format('$1234.23').replace(/,/g,"")); // NaN

// Edge Cases
parseFloat(numFormatter.format(true).replace(/,/g,"")) // 1
parseFloat(numFormatter.format(false).replace(/,/g,"")) // 0
parseFloat(numFormatter.format(NaN).replace(/,/g,"")) // NaN

Utilisez la date internationale locale via format. Cela nettoie toutes les mauvaises entrées, s'il y en a une, il renvoie une chaîne que NaNvous pouvez vérifier. Il n'y a actuellement aucun moyen de supprimer les virgules dans le cadre de la locale (à partir du 10/12/19) , vous pouvez donc utiliser une commande regex pour supprimer les virgules en utilisant replace.

ParseFloat convertit la définition de ce type de chaîne en nombre

Si vous utilisez React, voici à quoi pourrait ressembler votre fonction de calcul:

updateCalculationInput = (e) => {
    let value;
    value = numFormatter.format(e.target.value); // 123,456.78 - 3rd decimal rounds to nearest number as expected
    if(value === 'NaN') return; // locale returns string of NaN if fail
    value = value.replace(/,/g, ""); // remove commas
    value = parseFloat(value); // now parse to float should always be clean input

    // Do the actual math and setState calls here
}
Vincent Tang
la source