2010-02-22 10 views

risposta

9

Dipende davvero da dove ottieni il tuo numero.

Se il numero che si sta tentando di convertire viene da input dell'utente, utilizzare locale.atoi(). In questo modo, il numero verrà analizzato in modo coerente con le impostazioni dell'utente e quindi con le aspettative.

Se invece lo leggi, diciamo, da un file, che utilizza sempre lo stesso formato, usa int("1,234".replace(",", "")) o int("1.234".replace(".", "")) a seconda della situazione. Questo non è solo più facile da leggere ed eseguire il debug, ma non è influenzato dalle impostazioni locali dell'utente, quindi il parser funzionerà su qualsiasi sistema.

4

locale.atoi(), dopo aver impostato una locale appropriata.

+0

+1 Questo è migliore di sostituire le virgole con vuoti corde, perché in alcune zone virgole vengono usati come separatori decimali, mentre periodi giocano la parte di delimitare le migliaia, milioni ecc – Tarydon

+0

Dipende cosa stai cercando di analizzare. Input dell'utente? O un file con un formato fisso (ad esempio un CSV che si ottiene da un sistema legacy)? Non lo stesso. Vedi la mia risposta qui sotto. – 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 
Problemi correlati