我正在处理一个错误,其中将 str
函数应用于 decimal.Decimal
的实例会给我字符串 '0E-1000'
。我期望应用于 Decimal
的 str
总是会给我一个 -?[0-9]+(\.[0-9] 形式的字符串+)
,这就是我想要的。
首先,如果我没有理解错的话,科学记数法'0E-1000'
代表0 x 10^-1000,即0。为什么我会得到这种特定的零表示形式?为什么不是 '0E-42'
,它是一样的?
其次,我无法手动构建重现此错误的 Decimal
。有问题的 Decimal
实例来自外部来源。表达式 str(Decimal(0))
在 REPL 中的计算结果为 '0'
。我如何构建 Decimal
的实例 d
,str(d)
的计算结果为 '0E-1000'
?
编辑:第三,如何将任意 Decimal
实例转换为字符串,您知道,decimal 表示法?
最佳答案
如果你想重现你的小数,只需从字符串构造它:
>>> d=decimal.Decimal("0E-1000")
>>> str(d)
'0E-1000'
我认为区别在于 0
和 0.00000
(或者在您的情况下为 1000 个零)之间的区别,这就是准确性。这在科学情况下可能很重要,因为舍入等是由操作数的精度控制的。如果你想让打印一致,使用decimal.Decimal.normalize
:
>>> d=decimal.Decimal("0E-1000")
>>> d
Decimal('0E-1000')
>>> d.normalize()
Decimal('0')
>>> str(d.normalize())
'0'
关于Python Decimal to string 产生奇怪的科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28503172/