我正在处理一个错误,即将str
函数应用于decimal.Decimal
的实例会为我提供字符串'0E-1000'
。我预计应用于str
的{{1}}总是会给我一个Decimal
形式的字符串,这就是我想要的。
首先,如果我理解正确,科学记数法-?[0-9]+(\.[0-9]+)
代表0 x 10 ^ -1000,即零。为什么我得到零的特定表示?为什么不'0E-1000'
,哪个相同?
其次,我无法手动构建再现此错误的'0E-42'
。有缺陷的Decimal
实例来自外部源。表达式Decimal
在REPL中计算为str(Decimal(0))
。如何构建'0'
d
的实例Decimal
str(d)
评估为'0E-1000'
?
编辑:第三,如何将任意Decimal
实例转换为字符串,你知道吗, decimal 表示法?
答案 0 :(得分:5)
如果要重现小数,只需从字符串构建它:
>>> 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'