Python

2011-07-09 15 views
34

'daki bir float numarasına nokta ve virgül ile bir dize nasıl dönüştürebilirim Python'da 123456.908 numaralı float numarasına "123,456.908" gibi bir dizgiyi nasıl dönüştürebilirim? Çok teşekkürler.Python

+5

Bunu yapmanın en uygun yolu, 'locale' modülünü kullanmaktır - diğer her şey, gelecekte sorun çıkarmanızı sağlayacak çok kötü bir hacktir. –

cevap

64

Sadece kaldırmak ,replace() ile:

bu konuda
float("123,456.908".replace(',','')) 
+2

bu, yerel ayarlara bağlıdır. 9 988 776,65 € Fransa 9.988.776,65 € in Almanya $ 9,988,776.65 Amerika Birleşik Devletleri'nde –

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

ne? Kısacası

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

İşte senin için yazdım basit bir yoludur. Çöp filtrelenmeye olarak :)

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

're' böyle bir görev için büyük bir çekiç. –

+0

@Roman: Evet, bunu farkettim ve düzelttim. :) –

+0

@John Doe: Şimdi daha iyi görünüyor. Tanımlayıcı dokunuşundan dolayı float (sayı) seviyorum. +1 ;-) – Aufwind

96

... Veya bunun yerine virgül tedavi, biz şamandıra bir lokalize biçimlendirme gibi genel dize tedavi ve yerelleştirme hizmetleri kullanabilirsiniz:

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 
+1

Şimdiye kadar çoğu pythonic ve sezgisel yol. +1 – Aufwind

+0

Örneklerde hem ondalık hem de basamaklı gruplama karakterleri içeriyorsa, bu yanıtı üste sayardım… – martineau

+6

Kitaplık için kötü bir betik için iyi: 'Uzatma modülleri asla setlocale() 'yi çağırmamalıdır()' – dangonfast