Как я могу преобразовать строку вроде 123,456.908
float 123456.908
в Python?
python
type-conversion
Кевинлу
источник
источник
locale
модуль - все остальное - просто очень неприятный прием, который доставит вам неприятности в будущем.Ответы:
Просто удалите с
,
помощьюreplace()
:float("123,456.908".replace(',',''))
источник
python cd_size = float("737,280,000".replace(',',''))
(На самом деле я использовал int)setlocale
в первую очередь.... Или вместо того, чтобы рассматривать запятые как мусор, который нужно отфильтровать, мы могли бы рассматривать всю строку как локализованное форматирование float и использовать службы локализации:
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
источник
Extension modules should never call setlocale()
atof
встроенный метод строк . Здесь я использую функциюatof
изlocale
стандартного библиотечного модуля, которая вообще не является устаревшей.locale.atof
Как насчет этого?
my_string = "123,456.908" commas_removed = my_string.replace(',', '') # remove comma separation my_float = float(commas_removed) # turn from string to float.
Короче говоря:
my_float = float(my_string.replace(',', ''))
источник
Если у вас есть запятая в качестве разделителя десятичных знаков и точка в качестве разделителя тысяч, вы можете сделать:
s = s.replace('.','').replace(',','.') number = float(s)
Надеюсь, это поможет
источник
Если вы не знаете языковой стандарт и хотите проанализировать любое число, используйте эту
parseNumber(text)
функцию . Это не идеально, но учитывает большинство случаев:>>> 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
источник
s = "123,456.908" print float(s.replace(',', ''))
источник
Вот простой способ, который я написал для вас. :)
>>> number = '123,456,789.908'.replace(',', '') # '123456789.908' >>> float(number) 123456789.908
источник
re
большой молоток для такой задачи.float(number)
из-за его наглядности. +1 ;-)Просто замените
,
на replace ().f = float("123,456.908".replace(',','')) print(type(f)
type () покажет вам, что он преобразован в float
источник
Лучшее решение для разных валютных форматов :
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))
источник