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

时间:2015-02-13 15:38:39

标签: python string decimal scientific-notation

我正在处理一个错误,即将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 表示法?

1 个答案:

答案 0 :(得分:5)

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

>>> d=decimal.Decimal("0E-1000")
>>> str(d)
'0E-1000'

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

>>> d=decimal.Decimal("0E-1000")
>>> d
Decimal('0E-1000')
>>> d.normalize()
Decimal('0')
>>> str(d.normalize())
'0'