2010-10-28 5 views
0

Très rouillé avec mon Python. J'ai une liste de coût en tant que chaînes. J'essaye de les convertir en flotteurs mais quand le coût est supérieur à 1000 $, la valeur est représentée par une virgule. float ("1,000") renvoie une erreur:Quel est le problème avec float ("1,000")?

Traceback (most recent call last): 
File "<pyshell#5>", line 1, in <module> 
    decimal("1,000") 
TypeError: 'module' object is not callable 

Je sais que c'est probablement trivial mais avez-vous une solution?

Répondre

3

decimal n'est pas float. decimal est un module. C'est la raison de l'erreur que vous obtenez.

En ce qui concerne les virgules, les déposer d'abord:

s = "1,000" 
float(s.replace(",", "")) # = 1000.0 
2

Réutiliser pour supprimer toute mise en forme « » avant de convertir flotter.

>>> import re 
>>> re.sub(",", "", "1000,00,00") 
'10000000' 
>>> 
+4

're' est trop puissant. «remplacer» est suffisant comme indiqué dans ma réponse. –

+0

merci, mais d'accord que faire l'importation pour cela est trop – datayoda

1

L'erreur qui se posent est parce que vous essayez d'appeler le module comme celui-ci:

>>> import decimal 
>>> decimal("") 
TypeError: 'module' object is not callable 

vous devriez plutôt faire:

>>> import locale 
>>> import decimal 
>>> locale.setlocale(locale.LC_ALL, '') 
>>> decimal.Decimal(locale.atoi("1,000")) 
Decimal('1000') 

vous pouvez donc juste faire comme ça

+0

Dans la question la virgule est utilisée comme un séparateur de milliers. Votre résultat est différent. –

+0

@Muhammad Alkarouri: ohhh merci je n'ai pas très bien lu la question :) – mouad