十进制固定到两位的语法到底是怎么回事?
>>> from decimal import Decimal
>>> num = Decimal('1.0')
>>> num.quantize(Decimal(10) ** -2) # seriously?!
Decimal('1.00')
有没有更好的方法,一眼看起来不那么深奥?"量化小数"听起来像是《星际迷航》一集中的技术喋喋不休!
使用字符串格式:
>>> 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'
请参阅格式字符串语法文档。
除非您确切地知道自己在做什么,否则通过量化来扩展有效位数并不是要走的路;量化是会计软件包的秘密,通常目的是将结果四舍五入到更少的有效数字。
Quantize 用于设置值内部实际保存的位置数,然后再将其转换为字符串。正如Martijn指出的那样,这样做通常是为了通过四舍五入来减少位数,但反过来也可以。通过将目标指定为十进制数而不是位数,可以使两个值匹配,而无需具体知道其中有多少位。
如果您直接使用十进制值而不是尝试计算它,它看起来不那么深奥:
num.quantize(Decimal('0.01'))
您可以设置一些常量来隐藏复杂性:
places = [Decimal('0.1') ** n for n in range(16)]
num.quantize(places[2])