是否有更可读或Pythonic方式将Decimal格式化为2个位置?

时间:2013-09-16 18:33:36

标签: python decimal rounding

将Decimal修复为两个位置的语法究竟发生了什么?

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

有没有更好的方式一目了然看起来不那么深奥? “量化十进制”听起来就像“星际迷航”一集中的技术一样!

2 个答案:

答案 0 :(得分:6)

使用字符串格式:

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

format() function将字符串格式应用于值。 Decimal()个对象的格式可以像浮点值。

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

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

请参阅format string syntax documentation

除非你确切知道自己在做什么,否则通过量化扩大有效位数是不可取的;量化是会计软件包的秘密,通常的目的是将结果舍入到更少的有效数字。

答案 1 :(得分:1)

量化用于在将值转换为字符串之前设置值内部实际保留的位置数。正如Martijn所指出的那样,这通常是通过舍入来减少数字的位数,但它的工作方式与其他方式相同。通过将目标指定为十进制数而不是多个位数,您可以使两个值匹配,而无需具体知道其中有多少个位置。

如果直接使用小数值而不是尝试计算它,它看起来有点不太深奥:

num.quantize(Decimal('0.01'))

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

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

num.quantize(places[2])