117 votes

Supprimez les virgules d'une chaîne de caractères en utilisant JavaScript

Je veux supprimer les virgules de la chaîne et calculer le montant en utilisant JavaScript.

Par exemple, j'ai ces deux valeurs :

  • 100,000.00
  • 500,000.00

Maintenant je veux enlever les virgules de ces chaînes et je veux le total de ces montants.

1 votes

Ce n'est pas efficace, mais vous pouvez toujours faire "1,000,000.00".split(',").join("") .

211voto

lonesomeday Points 95456

Pour enlever les virgules, vous devrez utiliser replace sur la corde. Pour convertir en flottant afin de pouvoir faire les calculs, vous aurez besoin de parseFloat :

var total = parseFloat('100,000.00'.replace(/,/g, '')) +
            parseFloat('500,000.00'.replace(/,/g, ''));

3 votes

Yep, il faut combiner replace y parseFloat . voici un cas de test rapide : jsfiddle.net/TtYpH

1 votes

On est en 2017, n'y a-t-il aucun moyen d'aller à et de une chaîne locale ? Comment inverser cette fonction ? developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/ . J'ai posté une question distincte ici : stackoverflow.com/questions/41905406/

5voto

Vincent Tang Points 694

Réponse connexe, mais si vous voulez nettoyer un utilisateur qui saisit 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

Utiliser la date internationale locale via format . Ceci nettoie les mauvaises entrées, s'il y en a une, il retourne une chaîne de caractères de NaN vous pouvez vérifier. Il n'y a actuellement aucun moyen de supprimer les virgules dans le cadre des paramètres locaux. (à partir du 10/12/19) Vous pouvez donc utiliser une commande regex pour supprimer les virgules en utilisant les éléments suivants 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
}

0voto

Ahmad Ebrahim Points 159

C'est la façon la plus simple de procéder.

let total = parseInt(('100,000.00'.replace(',',''))) + parseInt(('500,000.00'.replace(',','')))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X