使用atof转换数字

时间:2018-02-17 16:04:07

标签: python python-3.x

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()的确是什么?

2 个答案:

答案 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