2012-11-13 43 views
7

如何明確地告訴python使用點或逗號作爲小數點分隔符來讀取十進制數?我不知道將要運行我的腳本PC的本地化設置,這不應該影響我的申請,我只想說:將Python字符串明確地使用逗號或點作爲分隔符轉換爲浮點數

f = read_float_with_point("3.14") 

f = read_float_with_comma("3,14") 

我認爲寫作

def read_float_with_comma(num): 
    return float(num.replace(",", ".") 

不安全,因爲我不知道區域設置!

+0

什麼是'1000':一或千? – katrielalex

+1

@katrielalex:完全取決於語言環境。 –

回答

9

,因爲我不知道該區域設置

你可以看看,最多使用locale module

​​

>>> locale.localeconv()['decimal_point'] 
'.' 

利用這一點,你的代碼可能變成:

import locale 
_locale_radix = locale.localeconv()['decimal_point'] 

def read_float_with_comma(num): 
    if _locale_radix != '.': 
     num = num.replace(_locale_radix, ".") 
    return float(num) 

更妙的是,在同一個模塊具有轉換功能給你,叫atof()

import locale 

def read_float_with_comma(num): 
    return locale.atof(num) 
+0

這將使用區域設置,這可能不是diegogb想要的。如果您需要輸出/解析與當前不同的語言環境中的數據,該怎麼辦?語言環境模塊顯然不鼓勵更改庫中的語言環境,所以此方法僅適用於簡單腳本。 – dangonfast

+0

@ jeckyll2hide:用於簡單腳本或桌面GUI程序或其他不需要爲多個(聯網)客戶端提供服務的程序。 –

+0

@ jeckyll2hide:但是OP特別想知道他的腳本會在哪些PC上運行,所以這正是想要的。這就是爲什麼OP將這個答案標記爲接受;他們的問題解決了。 –

1

您可以使用babel解析本地格式的小數點:

>>> parse_decimal('1,099.98', locale='en_US') 
Decimal('1099.98') 
>>> parse_decimal('1.099,98', locale='de') 
Decimal('1099.98') 
相關問題