2009-09-07 6 views
2

Disons que j'ai une chaîne comme celle-ci: '12,423,343.93'. Comment le convertir en float de façon simple, efficace et élégante?Suppression des symboles redondants de la chaîne

Il semble que j'ai besoin de supprimer les virgules redondantes de la chaîne, puis appelez float(), mais je n'ai pas de bonne solution pour cela.

Merci

Répondre

9
s = "12,423,343.93" 
f = float(s.replace(",", "")) 
+0

Merci! J'ai essayé .replace() mais j'ai pensé qu'il ne peut pas remplacer à la chaîne vide, donc stupide ... – bocco

+0

Heh, ce n'est pas Oracle, chaîne vide n'est pas la même chose que null. :-) Vous pouvez également remplacer '' avec '', car les espaces sont aussi parfois utilisés comme séparateurs de milliers. – bobince

6

Notez que les symboles seperator utilisés varient d'un pays à. Dans certaines cultures, "." est utilisé pour séparer les groupes, et "," indique un point décimal par exemple. Si vous analysez des chaînes entrées par l'utilisateur de la sorte, il peut être préférable d'utiliser le module locale. Par exemple:

>>> import locale 
>>> locale.atof('12,423,343.93') # No locale set yet, so this will refuse to parse 
ValueError: invalid literal for float(): 12,423,343.93 

>>> locale.setlocale(locale.LC_NUMERIC, "en_GB") # Use a UK locale. 
>>> locale.atof('12,423,343.93') 
12423343.93 
+1

Je vous avais donné un upvote, maintenant je ne suis plus sûr. J'apprécie l'idée, mais aujourd'hui, je me suis soudainement souvenu du peu de paramètres régionaux portables. Sur trois machines, j'ai dû utiliser trois noms de local différents pour produire le même résultat. – krawyoti

+0

Hmm. Vous pouvez avoir un point. Juste essayé la même chose sur un système Windows et en effet les paramètres régionaux semblent être très difficiles à utiliser. Vous devez avoir les paramètres régionaux exacts (y compris le jeu de caractères, même si ce n'est pas nécessaire pour le traitement numérique) installés pour pouvoir le définir. – Brian

Questions connexes