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

标签 python string decimal scientific-notation

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

首先,如果我没有理解错的话,科学记数法'0E-1000'代表0 x 10^-1000,即0。为什么我会得到这种特定的零表示形式?为什么不是 '0E-42',它是一样的?

其次,我无法手动构建重现此错误的 Decimal。有问题的 Decimal 实例来自外部来源。表达式 str(Decimal(0)) 在 REPL 中的计算结果为 '0'。我如何构建 Decimal 的实例 dstr(d) 的计算结果为 '0E-1000'

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

最佳答案

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

>>> 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'

关于Python Decimal to string 产生奇怪的科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28503172/

相关文章:

python - Django 在 Mac OS X Lion 上非常慢

python - 是否有更优雅的方法来处理此抓取工具中的空值?

c++ - QString从列表中解析项目

python - 如何在 Pandas 中测试字符串是否包含列表中的子字符串之一?

c# - 为什么具有相同值的两个小数的格式不同

c++ - 将字符串转换为十进制 C++

python - 值错误 : Attempted relative import in non-package not for tests package

python - 从 BaseQuery 对象获取结果

c - K&R - 练习 1-9 - 删除空格

r - 如何在 R Shiny 的数据表中始终显示 3 位小数?