Python Decimal to string产生奇怪的科学记数法

jam*_*her 3 python string scientific-notation decimal

我正在处理一个错误,将str函数应用于一个实例decimal.Decimal给我字符串'0E-1000'.我希望str应用于a Decimal总会给我一个表格的字符串-?[0-9]+(\.[0-9]+),这就是我想要的.

首先,如果我理解正确,科学记数法'0E-1000'表示0 x 10 ^ -1000,即零.为什么我得到零的特定表示?为什么不'0E-42',哪个是一样的?

其次,我不能手动构建一个Decimal再现这个bug的东西.有缺陷的Decimal实例来自外部源.表达式在REPL中str(Decimal(0))评估'0'.我怎样才能构建一个实例dDecimal用于其str(d)计算结果为'0E-1000'

编辑:第三,如何将任意Decimal实例转换为字符串,你知道,十进制表示法?

mat*_*yce 5

如果要重现小数,只需从字符串构造它:

>>> d=decimal.Decimal("0E-1000")
>>> str(d)
'0E-1000'
Run Code Online (Sandbox Code Playgroud)

我认为区别在于00.00000(或在你的情况下为1000个零)之间的差异,这就是准确性.这在科学情况下可能是重要的,其中舍入等由操作数的精度控制.如果要使打印一致,请使用decimal.Decimal.normalize:

>>> d=decimal.Decimal("0E-1000")
>>> d
Decimal('0E-1000')
>>> d.normalize()
Decimal('0')
>>> str(d.normalize())
'0'
Run Code Online (Sandbox Code Playgroud)