Làm cách nào để chuyển đổi một chuỗi giống như 123,456.908float 123456.908trong Python?
Câu trả lời:
Chỉ cần xóa ,bằng replace():
float("123,456.908".replace(',',''))
python cd_size = float("737,280,000".replace(',','')) (Tôi thực sự đã sử dụng int)
setlocaleở nơi đầu tiên.
... Hoặc thay vì coi các dấu phẩy là rác cần được lọc ra, chúng ta có thể coi chuỗi tổng thể như một định dạng bản địa hóa của float và sử dụng các dịch vụ bản địa hóa:
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 phương thức nội trang của chuỗi . Những gì tôi đang sử dụng ở đây là chức năng atoftừ localemô-đun thư viện tiêu chuẩn, không bị phản đối.
locale.atof
Nếu bạn có dấu phẩy làm dấu phân cách số thập phân và dấu chấm là dấu phân cách hàng nghìn, bạn có thể thực hiện:
s = s.replace('.','').replace(',','.')
number = float(s)
Hy vọng nó sẽ giúp ích
Nếu bạn không biết ngôn ngữ và bạn muốn phân tích cú pháp bất kỳ loại số nào, hãy sử dụng chức năng nàyparseNumber(text) . Nó không hoàn hảo nhưng hãy tính đến hầu hết các trường hợp:
>>> 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
Đây là một cách đơn giản tôi đã viết cho bạn. :)
>>> number = '123,456,789.908'.replace(',', '') # '123456789.908'
>>> float(number)
123456789.908
relà một cái búa lớn cho một nhiệm vụ như vậy.
float(number)vì cảm giác mô tả của nó. +1 ;-)
Chỉ cần thay thế ,bằng Replace ().
f = float("123,456.908".replace(',',''))
print(type(f)
type () sẽ cho bạn thấy rằng nó đã được chuyển đổi thành float
Giải pháp tốt hơn cho các định dạng tiền tệ khác nhau :
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))
localemô-đun - mọi thứ khác chỉ là một vụ hack rất khó chịu sẽ khiến bạn gặp rắc rối trong tương lai.