Jak mogę przekonwertować ciąg, taki jak 123,456.908
float 123456.908
w Pythonie?
python
type-conversion
kevinlu
źródło
źródło
locale
modułu - wszystko inne to tylko bardzo paskudny hack, który wpędzi cię w kłopoty w przyszłości.Odpowiedzi:
Po prostu usuń za
,
pomocąreplace()
:float("123,456.908".replace(',',''))
źródło
python cd_size = float("737,280,000".replace(',',''))
(Właściwie użyłem int)setlocale
na pierwszym miejscu.... Lub zamiast traktować przecinki jako śmieci do odfiltrowania, moglibyśmy traktować cały ciąg jako zlokalizowane formatowanie zmiennej zmiennoprzecinkowej i używać usług lokalizacyjnych:
from locale import atof, setlocale, LC_NUMERIC setlocale(LC_NUMERIC, '') # set to your default locale; for me this is # 'English_Canada.1252'. Or you could explicitly specify a locale in which floats # are formatted the way that you describe, if that's not how your locale works :) atof('123,456') # 123456.0 # To demonstrate, let's explicitly try a locale in which the comma is a # decimal point: setlocale(LC_NUMERIC, 'French_Canada.1252') atof('123,456') # 123.456
źródło
Extension modules should never call setlocale()
atof
wbudowana metoda ciągów . Używam tutaj funkcjiatof
zelocale
standardowego modułu biblioteki, która wcale nie jest przestarzała.locale.atof
A co z tym?
my_string = "123,456.908" commas_removed = my_string.replace(',', '') # remove comma separation my_float = float(commas_removed) # turn from string to float.
W skrócie:
my_float = float(my_string.replace(',', ''))
źródło
Jeśli masz przecinek jako separator miejsc dziesiętnych, a kropkę jako separator tysięcy, możesz:
s = s.replace('.','').replace(',','.') number = float(s)
Mam nadzieję, że to pomoże
źródło
Jeśli nie znasz ustawień regionalnych i chcesz przeanalizować dowolną liczbę, użyj tej
parseNumber(text)
funkcji . Nie jest doskonały, ale weź pod uwagę większość przypadków:>>> parseNumber("a 125,00 €") 125 >>> parseNumber("100.000,000") 100000 >>> parseNumber("100 000,000") 100000 >>> parseNumber("100,000,000") 100000000 >>> parseNumber("100 000 000") 100000000 >>> parseNumber("100.001 001") 100.001 >>> parseNumber("$.3") 0.3 >>> parseNumber(".003") 0.003 >>> parseNumber(".003 55") 0.003 >>> parseNumber("3 005") 3005 >>> parseNumber("1.190,00 €") 1190 >>> parseNumber("1190,00 €") 1190 >>> parseNumber("1,190.00 €") 1190 >>> parseNumber("$1190.00") 1190 >>> parseNumber("$1 190.99") 1190.99 >>> parseNumber("1 000 000.3") 1000000.3 >>> parseNumber("1 0002,1.2") 10002.1 >>> parseNumber("") >>> parseNumber(None) >>> parseNumber(1) 1 >>> parseNumber(1.1) 1.1 >>> parseNumber("rrr1,.2o") 1 >>> parseNumber("rrr ,.o") >>> parseNumber("rrr1rrr") 1
źródło
s = "123,456.908" print float(s.replace(',', ''))
źródło
Oto prosty sposób, w jaki napisałem dla Ciebie. :)
>>> number = '123,456,789.908'.replace(',', '') # '123456789.908' >>> float(number) 123456789.908
źródło
re
to duży młot do takiego zadania.float(number)
ze względu na opisowy dotyk. +1 ;-)Po prostu zamień na
,
replace ().f = float("123,456.908".replace(',','')) print(type(f)
type () pokaże, że został przekształcony w float
źródło
Lepsze rozwiązanie dla różnych formatów walut :
def text_currency_to_float(text): t = text dot_pos = t.rfind('.') comma_pos = t.rfind(',') if comma_pos > dot_pos: t = t.replace(".", "") t = t.replace(",", ".") else: t = t.replace(",", "") return(float(t))
źródło