Daniele Varrazzo ha scritto: > On Tue, 7 Oct 2008 12:09:55 -0400, "Antonio Cangiano" <[EMAIL PROTECTED]> > wrote: >> On Tue, Oct 7, 2008 at 11:58 AM, Daniele Varrazzo <[EMAIL PROTECTED]> > wrote: >>> No, non lo è. Io di solito aggiro la cosa con: >>> >>> In [1]: s = "20,90" >>> >>> In [2]: print float(s.replace(",", ".")) >>> 20.9 >> Occhio che gli ammerregani usano la virgola per separare gruppi di cifre: >> >>>>> s = "10,239.59" >>>>> print float(s.replace(",",".")) >> Traceback (most recent call last): >> File "<stdin>", line 1, in <module> >> ValueError: invalid literal for float(): 10.239.59 > > Ipotizzo che l'OP usi un computer italiano (con sopra installato windows) e > debba parsare numeri emessi da un programma su tale piattaforma. Ipotizzo > anche che non ci sia un separatore decimale, che in Italia è il punto, > perché anche in questo caso ("12.345,67") la mia ricetta fallirebbe. > > Ovviamente è banale risolvere il problema: > > In [3]: s = "12.345,67" > > In [4]: print float(s.replace(".","").replace(",", ".")) > 12345.67 >
Meglio ancora se i separatori sono configurabili. Ad esempio usando, come default, i valori previsti per il dato locale. Usando Babel (http://babel.edgewall.org/): locale = Locale.parse(locale) try: return float(string.replace(get_group_symbol(locale), '') .replace(get_decimal_symbol(locale), '.')) except ValueError: raise NumberFormatError( '%r is not a valid decimal number' % string) (da http://babel.edgewall.org/browser/trunk/babel/numbers.py) > ma è scontato (e ora lo splicito anche) che funziona solo se si sa quale > formato si sta convertendo, non se lo si applica a una stringa dalla > formattazione sconosciuta. > Manlio Perillo _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python