1

What the heck is going on with the syntax to fix a Decimal to two places?

>>> from decimal import Decimal
>>> num = Decimal('1.0')
>>> num.quantize(Decimal(10) ** -2) # seriously?!
Decimal('1.00')

Is there a better way that doesn't look so esoteric at a glance? 'Quantizing a decimal' sounds like technobabble from an episode of Star Trek!

4

2 回答 2

6

使用字符串格式:

>>> from decimal import Decimal
>>> num = Decimal('1.0')
>>> format(num, '.2f')
'1.00'

format()函数将字符串格式应用于值。Decimal()对象可以像浮点值一样格式化。

您还可以使用它来插入格式化的十进制值是一个更大的字符串:

>>> 'Value of num: {:.2f}'.format(num)
'Value of num: 1.00'

请参阅格式字符串语法文档

除非您确切知道自己在做什么,否则通过量化来扩展有效数字的数量不是可行的方法;量化是会计软件包的秘密,通常旨在将结果四舍五入到更少的有效数字。

于 2013-09-16T18:34:48.957 回答
1

Quantize 用于设置在值转换为字符串之前实际在内部保存的位置数。正如 Martijn 指出的那样,通常这样做是为了通过四舍五入减少位数,但反过来也一样。通过将目标指定为十进制数而不是位数,您可以使两个值匹配,而无需具体知道其中有多少位。

如果您直接使用十进制值而不是尝试计算它,它看起来就不那么深奥了:

num.quantize(Decimal('0.01'))

您可以设置一些常量来隐藏复杂性:

places = [Decimal('0.1') ** n for n in range(16)]

num.quantize(places[2])
于 2013-09-16T19:52:28.370 回答