在Python 3.5
中,我想使用locale.atof
将德语数字字符串转换为浮点数,并使用以下代码:
import locale
from locale import atof
locale.setlocale(locale.LC_ALL, 'de_DE')
number = atof('17.907,08')
然而,这会引发ValueError
:
ValueError: could not convert string to float: '17.907.08'
<小时/> 为什么?这究竟是
atof()
的确是什么?
答案 0 :(得分:2)
您的号码不能包含多个点(.
)或逗号(,
),因为这两个符号都由{{}使用1}}将数字的小数部分与整数部分分开。
由于Python不需要点来正确表示您的号码,因此您应该删除它们并仅保留逗号:
atof()
答案 1 :(得分:0)
仅供将来参考 - 这是我最终使用的内容:
import locale
from locale import atof
def convert(string, thousands_delim = '.', abbr = 'de_DE.UTF-8'):
''' Converts a string to float '''
locale.setlocale(locale.LC_ALL, abbr)
try:
number = atof("".join(string.split(thousands_delim)))
except ValueError:
number = None
return number
<小时/> 你称之为
number = convert('17.907,08')
print(number)
# 17907.08
...或英文数字:
number = convert('1,000,000', abbr = 'en_US')
print(number)
# 1000000.0