使用 atof 转换数字

Jan*_*Jan 4 python python-3.5

在 中Python 3.5,我想使用locale.atof以下代码将德语数字字符串转换为浮点数:


import locale
from locale import atof
locale.setlocale(locale.LC_ALL, 'de_DE')

number = atof('17.907,08')
Run Code Online (Sandbox Code Playgroud)

然而,这提出了一个ValueError

ValueError: could not convert string to float: '17.907.08'
Run Code Online (Sandbox Code Playgroud)


为什么?这不就是atof()为了这个而生的吗?

Ron*_*eau 6

数字中不能有多个点 ( .) 或逗号 (, ) ,因为这两种符号都用于atof()分隔数字的小数部分和整数部分。

由于 Python 不需要点来正确表示您的数字,因此您应该删除它们并只保留逗号:

import locale
from locale import atof
locale.setlocale(locale.LC_ALL, 'de_DE')

string_nb = '17.907,08'
string_nb = string_nb.replace('.', '')
number = atof(string)
Run Code Online (Sandbox Code Playgroud)

  • 在 Python 3.10 中不再需要这种操作。`atof('17.907,08')` 有效。 (2认同)