2010-02-22 4 views

Répondre

9

Cela dépend vraiment de l'endroit où vous obtenez votre numéro.

Si le nombre que vous essayez de convertir provient d'une entrée utilisateur, utilisez locale.atoi(). De cette façon, le nombre sera analysé d'une manière qui est compatible avec les paramètres de l'utilisateur et donc les attentes. En revanche, si vous lisez un fichier qui utilise toujours le même format, utilisez int("1,234".replace(",", "")) ou int("1.234".replace(".", "")) selon votre situation. Ce n'est pas seulement plus facile à lire et à déboguer, mais il n'est pas affecté par les paramètres régionaux de l'utilisateur, donc votre analyseur fonctionnera sur n'importe quel système.

4

locale.atoi(), après avoir défini les paramètres régionaux appropriés.

+0

+1 Cela vaut mieux que le simple remplacement des virgules avec vides-chaînes, parce que les virgules sont utilisés dans certains endroits comme séparateur décimal, alors que les périodes jouent le rôle de délimitation des milliers, des millions, etc. – Tarydon

+0

dépend de ce que vous essayez d'analyser. Entrée de l'utilisateur? Ou un fichier avec un format fixe (disons un CSV que vous obtenez d'un système existant)? Pas le même. Voir ma réponse ci-dessous. – ibz

2
int("1,374".replace(",","")) 
2
>>> s="1,374" 
>>> import locale 
>>> locale.setlocale(locale.LC_NUMERIC, '') 
'en_US.UTF-8' 
>>> locale.atoi(s) 
1374 
Questions connexes