Как я могу преобразовать строку с точкой и запятой в число с плавающей точкой в ​​Python - PullRequest
61 голосов
/ 09 июля 2011

Как мне преобразовать строку типа 123,456.908 в число с плавающей точкой 123456.908 в Python?

Ответы [ 9 ]

121 голосов
/ 09 июля 2011

... Или вместо того, чтобы рассматривать запятые как мусор, который нужно отфильтровать, мы могли бы рассматривать всю строку как локализованное форматирование с плавающей точкой и использовать службы локализации:

from locale import *
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
89 голосов
/ 09 июля 2011

Просто удалите , с replace():

float("123,456.908".replace(',',''))
5 голосов
/ 09 июля 2011

А как насчет этого?

 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(',', ''))
4 голосов
/ 25 июля 2018

Если у вас запятая в качестве разделителя десятичных знаков и точка в качестве разделителя тысяч, вы можете сделать:

s = s.replace('.','').replace(',','.')
number = float(s)

Надеюсь, это поможет

2 голосов
/ 24 апреля 2018

Если вы не знаете локаль и хотите разобрать любой номер, используйте this parseNumber(text) function . Он не идеален, но учитывает большинство случаев:

>>> 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
1 голос
/ 09 июля 2011

Вот простой способ, который я написал для вас. :)

>>> number = '123,456,789.908'.replace(',', '') # '123456789.908'
>>> float(number)
123456789.908
1 голос
/ 09 июля 2011
s =  "123,456.908"
print float(s.replace(',', ''))
0 голосов
/ 05 марта 2019

Лучшее решение для различных форматов валюты :

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))
0 голосов
/ 25 июля 2018

Просто замените , на replace ().

f = float("123,456.908".replace(',','')) print(type(f)

type () покажет, что он преобразован в число с плавающей точкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...