【发布时间】:2018-02-09 07:49:21
【问题描述】:
我正在尝试将字符串转换为 python 小数。
这行得通
from decimal import *
mystr = '123.45'
print(Decimal(mystr))
但是当我想使用千位分隔符和语言环境时,它没有。 转换为浮点数可以正常工作。
from locale import *
setlocale(LC_NUMERIC,'German_Germany.1252')
from decimal import *
mystr = '1.234,56'
print(atof(mystr))
print(Decimal(mystr))
返回浮点数和错误
1234.56
InvalidOperation: [<class 'decimal.ConversionSyntax'>]
是否有正确的方法来转换字符串,而无需通过浮动或更黑客的解决方案手动转换它? FYA,我目前的 hacky 解决方案是:
print(Decimal(f'{atof(mystr):2.2f}'))
【问题讨论】:
-
Decimal(atof(mystr))有什么问题? (注意你的测试输出不匹配:这里我得到1234.56) -
@Jean-FrançoisFabre 我已经使用过它,并且在添加我以这种方式生成的小数时会出现令人讨厌的舍入错误。这对我来说也像是一个黑客......
-
是的,有一些舍入错误,但这是因为浮点表示,它不是真正的舍入。只是
Decimal不处理语言环境。对我来说,这似乎不是一个黑客。 -
也许是一个 python PEP(没那么容易)。这将是一个有趣的功能。 @MartijnPieters 对此有任何想法,这是个好主意吗? (抱歉打扰了)
-
我没有午休,好吧,我和我的朋友苹果一起吃了:) 这么好的主意可以被接受。困难似乎是:如何正确编写 PEP。当然,如果您有一些实施想法,那会有所帮助。
标签: python python-3.x decimal type-conversion