¿Cómo puedo convertir una cadena como 123,456.908
flotar 123456.908
en Python?
python
type-conversion
Kevinlu
fuente
fuente
locale
módulo; todo lo demás es solo un truco muy desagradable que te meterá en problemas en el futuro.Respuestas:
Simplemente elimine el
,
conreplace()
:float("123,456.908".replace(',',''))
fuente
python cd_size = float("737,280,000".replace(',',''))
(De hecho usé int)setlocale
en primer lugar.... O en lugar de tratar las comas como basura para filtrar, podríamos tratar la cadena general como un formato localizado del flotante y usar los servicios de localización:
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
fuente
Extension modules should never call setlocale()
atof
método incorporado de cadenas . Lo que estoy usando aquí es la funciónatof
dellocale
módulo de biblioteca estándar, que no está obsoleta en absoluto.locale.atof
¿Qué pasa con esto?
my_string = "123,456.908" commas_removed = my_string.replace(',', '') # remove comma separation my_float = float(commas_removed) # turn from string to float.
En breve:
my_float = float(my_string.replace(',', ''))
fuente
Si tiene una coma como separador de decimales y el punto como separador de miles, puede hacer:
s = s.replace('.','').replace(',','.') number = float(s)
Espero que ayude
fuente
Si no conoce la configuración regional y desea analizar cualquier tipo de número, use esta
parseNumber(text)
función . No es perfecto pero ten en cuenta la mayoría de los casos:>>> 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
fuente
s = "123,456.908" print float(s.replace(',', ''))
fuente
He aquí una forma sencilla que escribí para ti. :)
>>> number = '123,456,789.908'.replace(',', '') # '123456789.908' >>> float(number) 123456789.908
fuente
re
es un gran martillo para tal tarea.float(number)
por su toque descriptivo. +1 ;-)Simplemente reemplácelo
,
con replace ().f = float("123,456.908".replace(',','')) print(type(f)
type () le mostrará que se ha convertido en un flotador
fuente
Mejor solución para diferentes formatos de moneda :
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))
fuente