Como posso converter uma string 123,456.908
para flutuar 123456.908
no Python?
python
type-conversion
Kevinlu
fonte
fonte
locale
módulo - todo o resto é apenas um hack muito desagradável que o colocará em apuros no futuro.Respostas:
Basta remover
,
comreplace()
:float("123,456.908".replace(',',''))
fonte
python cd_size = float("737,280,000".replace(',',''))
(Na verdade, usei int)setlocale
em primeiro lugar.... Ou, em vez de tratar as vírgulas como lixo a ser filtrado, poderíamos tratar a string geral como uma formatação localizada do float e usar os serviços de localização:
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
fonte
Extension modules should never call setlocale()
atof
método embutido de strings . O que estou usando aqui é a funçãoatof
dolocale
módulo de biblioteca padrão, que não foi descontinuado.locale.atof
Se você não souber a localidade e quiser analisar qualquer tipo de número, use esta
parseNumber(text)
função . Não é perfeito, mas leva em consideração a maioria dos 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
fonte
Se você tiver uma vírgula como separador de decimais e o ponto como separador de milhares, você pode fazer:
s = s.replace('.','').replace(',','.') number = float(s)
Espero que ajude
fonte
Que tal isso?
my_string = "123,456.908" commas_removed = my_string.replace(',', '') # remove comma separation my_float = float(commas_removed) # turn from string to float.
Em resumo:
my_float = float(my_string.replace(',', ''))
fonte
s = "123,456.908" print float(s.replace(',', ''))
fonte
Esta é uma maneira simples que escrevi para você. :)
>>> number = '123,456,789.908'.replace(',', '') # '123456789.908' >>> float(number) 123456789.908
fonte
re
é um grande martelo para tal tarefa.float(number)
por causa de seu toque descritivo. +1 ;-)Basta substituir
,
por replace ().f = float("123,456.908".replace(',','')) print(type(f)
type () irá mostrar a você que ele foi convertido em um float
fonte
Melhor solução para diferentes formatos de moeda :
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))
fonte