2009-10-25 4 views
2

Je voudrais convertir une chaîne au format monétaire en un float en javascript.convertir une chaîne de format argent pour flotter en js

ex: « 1,000.20 $ » convertir à un flotteur 1000,20

« USD 1,000.20 » convertir en un flotteur 1000,20

Je suis aussi intéressé de savoir comment remplacer les caractères alphabétiques à dire « * »

Comment cela peut-il être mis en œuvre?

Répondre

5

Vous pouvez choisir les numéros d'une chaîne arbitraire avec regex:

var match= string.match(/[0-9,.]*/); 
if (match!==null) { 
    var amount= parseFloat(match[0].replace(/,/g, '')); // replace , thousands separator 
} 

Cependant! C'est généralement un non-non pour stocker des montants en argent dans un type à virgule flottante en raison de l'inexactitude des calculs à virgule flottante. Bien sûr, JavaScript seulement vous donne des nombres à virgule flottante, mais en collant à des nombres entiers (par exemple des centimes) vous obtenez des calculs précis jusqu'à l'étrange quadrillion.

Le meilleur de tous pour traiter de l'argent est d'utiliser un type arithmétique décimal. Ce n'est pas un type intégré en JavaScript, mais voici an implementation. (Il est malheureusement assez lourd ... Je pense à un piratage plus simple de mise en œuvre juste les bases pour les cas trivial où vous avez besoin arithmétique de base.)

Je suis aussi intéressé de savoir comment pour remplacer les caractères alphabétiques dire '*'

regex nouveau:

string.replace(/[A-Z]/gi, '*') 

(pour les valeurs de « caractères alphabétiques » en vous ASCII Si vous avez besoin de lettres non-ASCII Unicode à remplacer'D. avoir à construire un charac beaucoup plus impliqué ter classe ... JavaScript ne pas classes intégrées pour les métadonnées du caractère entier Unicode.)

+0

Merci pour la bonne réponse. J'ai trouvé que je voulais une regex légèrement différente: string.match (/ [0-9,.] +/G) –

1

Utiliser JavaScript substring() méthode pour dépouiller les lettres, puis analyser en utilisant parseFloat

parseFloat('1,000.20') 

parseFloat('1,000.20') 
+0

semble ne pas fonctionner correctement à 100%. Si un faire 'parseFloat ('1,000.20')' dans Chrome, je reçois '' 1'' résultat – crashbus

1

cela pourrait fonctionner:

floatstring=currencystring.replace(/\$/,""); 
floatstring=floatstring.replace(/USD/,""); 
floatstring=floatstring.replace(/,/,""); 
floatstring=floatstring*1; 
+0

+1 pour remplacer la fonction – Xinus

4

Retirez tous les symboles non numériques:

dirty_string.replace (/[^\d.]/g, '')

0

Cela supprimera tous les caractères

 var value = string.replace(',', ''); 
     value = value.replace(/[^0-9,.]*/, ''); 
     value = parseFloat(value); 
2

Il y a longtemps que j'ai fait un regex pour gérer toutes sortes de devises ...

([+-]?[0-9|^.|^,]+)[\.|,]([0-9]+)$ 

Regardez le résultat de celui-ci

enter image description here

alors vous avez juste besoin d'obtenir la partie de fraction, enlever tout "" et "" et concat avec la partie de fraction si elle existe

Les résultats finaux deviennent:

let currency = "R$ -123.324,123,323" 
let regex = /([+-]?[0-9|^.|^,]+)[\.|,]([0-9]+)$/igm 
let result = regex.exec(currency); 
console.log("Regex result: " + result); 
let floatResult = result? result[1].replace(/[.,]/g, "")+ "." + result[2] : currency.replace(/[^0-9-+]/g, ""); 
console.log("Final result: " + floatResult); 

Codepen: https://codepen.io/nicollaas94/pen/zdOevo?editors=0011

Questions connexes