python - 如何在德语语言环境中将字符串转换为 Python Decimal(使用逗号而不是点)

标签 python python-3.x decimal type-conversion

我正在尝试将字符串转换为 Python 十进制数。

这行得通

from decimal import *
mystr = '123.45'
print(Decimal(mystr))

但是当我想使用千位分隔符和语言环境时,却没有。 转换为 float 效果很好。

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

返回 float 和一个错误

1234.56
InvalidOperation: [<class 'decimal.ConversionSyntax'>] 

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

 print(Decimal(f'{atof(mystr):2.2f}'))

最佳答案

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

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))

1234.56
1.234,56

引擎盖下locale.atof电话 delocalize完全按照@lsma 的建议执行的功能。

关于python - 如何在德语语言环境中将字符串转换为 Python Decimal(使用逗号而不是点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45980030/

相关文章:

c# - .NET decimal.Negate 与乘以 -1

具有不一致数据点的时间序列数据的 Python 移动平均线

python 速成类(class)使未注册用户可以访问 django 帖子

python - 如何检查 chr() 的输出是否未定义

python - 如何使用 os windows 在 python 3 中安装 matplotlib

python - 如何在 Python3 中进行 ROT13 编码?

JavaScript 十进制转十六进制

MySQL 转换为十进制不能按预期工作

python - 如何将大量分类数据从字符串自动转换为数值?

python - Django 重定向未按预期工作