如何在 Python 中将带有点和逗号的字符串转换为 float

如何在 Python 中将类似 123,456.908的字符串转换为浮动 123456.908


对于 int,请参阅 如何将一个字符串转换为一个数字,如果它有逗号作为数千个分隔符?,尽管技术基本上是相同的。

279517 次浏览

只要用 replace()移除 ,:

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

这个怎么样?

 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(',', ''))

这是我为你写的一个简单的方法:)

>>> number = '123,456,789.908'.replace(',', '') # '123456789.908'
>>> float(number)
123456789.908

或者,我们可以将整个字符串作为浮点数的本地化格式,并使用本地化服务,而不是将逗号作为要过滤掉的垃圾处理:

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

如果你不知道地区,你想解析任何类型的数字,使用 这个 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 = s.replace('.','').replace(',','.')
number = float(s)

希望能有所帮助

只需用 place ()替换 ,即可。

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))

你可以使用 babel:

from babel.numbers import parse_decimal
f = float(parse_decimal("123,456.908", locale="en_US"))