如何在德语区域设置中将字符串转换为Python Decimal(使用逗号而不是点)

576*_*76i 8 python decimal type-conversion python-3.x

我正在尝试将字符串转换为python小数.

这有效

from decimal import *
mystr = '123.45'
print(Decimal(mystr))
Run Code Online (Sandbox Code Playgroud)

但是,当我想使用千位分隔符和区域设置时,它不会.转换为float工作正常.

from locale import *
setlocale(LC_NUMERIC,'German_Germany.1252')
from decimal import *
mystr = '1.234,56'
print(atof(mystr))
print(Decimal(mystr))
Run Code Online (Sandbox Code Playgroud)

返回浮点数和错误

1234.56
InvalidOperation: [<class 'decimal.ConversionSyntax'>] 
Run Code Online (Sandbox Code Playgroud)

有没有一种正确的方法来转换字符串而无需通过float或hackier解决方案手动转换它?FYA,我目前的hacky解决方案是:

 print(Decimal(f'{atof(mystr):2.2f}'))
Run Code Online (Sandbox Code Playgroud)

new*_*ver 9

我做了一些研究,这是解决方案:

import decimal
import locale

locale.setlocale(locale.LC_ALL, 'de_DE')
mystr = '1.234,56'
num = locale.atof(mystr, decimal.Decimal)

print('{}'.format(num))
print('{:n}'.format(num))
Run Code Online (Sandbox Code Playgroud)
1234.56
1.234,56
Run Code Online (Sandbox Code Playgroud)

在引擎盖下locale.atof调用delocalize函数,它完全符合@lsma的建议.