2024-09-27 00:14:55 发布
网友
我了解指数的值,但通常在向最终用户显示十进制值时,外行更容易理解普通的十进制值。当我执行以下操作时,我希望十进制的显示值是50,而不是:
50
>>> Decimal('22679.6185') / Decimal('28.349523125') / 16 Decimal('5E+1')
在不量化或不修改实际值的情况下,这是否可能?另外,为什么它以指数的形式显示一个短值,而以正常的十进制形式显示一些较长的值?这是分裂的产物吗?在
请参见:Significant figures in the decimal module(它确实告诉您使用.quantize())。主要问题是您必须手动跟踪有效数字的数量。在
直接将十进制解析为所需的int或float。在
int(decimal.Decimal('22679.6185') / decimal.Decimal('28.349523125') / 16)
或者
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__和/或{}来更改它。在
Decimal
__str__
注意,__repr__的实现方式与return "Decimal('%s')" % str(self)类似,但是您应该尝试保留eval(repr(d)) == d的不变量。在
__repr__
return "Decimal('%s')" % str(self)
eval(repr(d)) == d
可能您更感兴趣的不是修改默认str输出或类的表示,而是控制实例的显示格式。在这种情况下,您应该能够使用^{}特性,例如
>>> num = Decimal('5E+1') >>> num Decimal('5E+1') >>> print("{:f}".format(num)) 50
请参见:Significant figures in the decimal module(它确实告诉您使用.quantize())。主要问题是您必须手动跟踪有效数字的数量。在
直接将十进制解析为所需的int或float。在
或者
^{pr2}$22679.6185/28.349523125正好等于800。它显示十进制(“8E2”)没有任何错误。在
精度取决于上下文对象。用“检查”decimal.getcontext(),如下所示:
“prec”就是你想要的。试试这个。在
结果是28个有效数字。在
您看到的是默认表示,您可以通过子类化}来更改它。在
Decimal
并重写__str__
和/或{注意,
__repr__
的实现方式与return "Decimal('%s')" % str(self)
类似,但是您应该尝试保留eval(repr(d)) == d
的不变量。在可能您更感兴趣的不是修改默认str输出或类的表示,而是控制实例的显示格式。在这种情况下,您应该能够使用^{} 特性,例如
相关问题 更多 >
编程相关推荐