为什么Python的Decimal将一些简单的值显示为expontents?我如何防止它?

2024-09-27 00:14:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我了解指数的值,但通常在向最终用户显示十进制值时,外行更容易理解普通的十进制值。当我执行以下操作时,我希望十进制的显示值是50,而不是:

>>> Decimal('22679.6185') / Decimal('28.349523125') / 16
Decimal('5E+1')

在不量化或不修改实际值的情况下,这是否可能?另外,为什么它以指数的形式显示一个短值,而以正常的十进制形式显示一些较长的值?这是分裂的产物吗?在


Tags: 情况指数形式decimal产物外行短值
3条回答

请参见:Significant figures in the decimal module(它确实告诉您使用.quantize())。主要问题是您必须手动跟踪有效数字的数量。在

直接将十进制解析为所需的int或float。在

int(decimal.Decimal('22679.6185') / decimal.Decimal('28.349523125') / 16)

或者

^{pr2}$

22679.6185/28.349523125正好等于800。它显示十进制(“8E2”)没有任何错误。在

精度取决于上下文对象。用“检查”decimal.getcontext(),如下所示:

Context(prec=28, rounding=ROUND_HALF_EVEN, ....)

“prec”就是你想要的。试试这个。在

 decimal.Decimal("42.5") / decimal.Decimal("37.1")

结果是28个有效数字。在

您看到的是默认表示,您可以通过子类化Decimal并重写__str__和/或{}来更改它。在

注意,__repr__的实现方式与return "Decimal('%s')" % str(self)类似,但是您应该尝试保留eval(repr(d)) == d的不变量。在

可能您更感兴趣的不是修改默认str输出或类的表示,而是控制实例的显示格式。在这种情况下,您应该能够使用^{}特性,例如

>>> num = Decimal('5E+1')
>>> num
Decimal('5E+1')
>>> print("{:f}".format(num))
50

相关问题 更多 >

    热门问题