我们在应用中向代理显示百分比值而没有尾随零(50.000%
比quantize
更容易快速扫描),到目前为止我们只使用>>> value = Decimal('50.000')
进行排序蛮力标准化值以删除尾随零。
今天早上我决定使用Decimal.normalize
代替,但遇到了这个问题:
给出小数值:
>>> value = value.normalize()
规范化该值:
>>> value
Decimal('5E+1')
结果:
>>> Decimal('5E+1') == Decimal('50')
True
我理解价值是一样的:
5E+1
但从非技术用户的角度来看,Decimal('5E+1')
基本上没有意义。
有没有办法将Decimal('50')
转换为Decimal
?
我不打算做任何会改变Decimal('33.333')
值的事情(例如,完全删除小数位),因为该值可能是例如50.000
。 IOW,不要混淆我的{{1}}示例,因为我们只处理整数。
答案 0 :(得分:0)
出于输出格式化的目的,您可以使用f
格式说明符打印规范化的Decimal对象。 (虽然格式字符串文档说默认值为6,但对于Decimal对象来说似乎不是这种情况。)
>>> print('{:f}%'.format(decimal.Decimal('50.000').normalize()))
50%
>>> print('{:f}%'.format(decimal.Decimal('50.003').normalize()))
50.003%
>>> print('{:f}%'.format(decimal.Decimal('1.23456789').normalize()))
1.23456789%
如果出于某种原因,你真的想要制作一个具有不同精度的新Decimal对象,你可以通过在Decimal
格式输出上调用f
来做到这一点,但这听起来像你是处理输出格式问题,而不是你应该改变内部表示的东西。
>>> Decimal('{:f}'.format(Decimal('5E+1')))
Decimal('50')
>>>
>>> Decimal('{:f}'.format(Decimal('50.000').normalize()))
Decimal('50')
>>> Decimal('{:f}'.format(Decimal('50.003').normalize()))
Decimal('50.003')
>>> Decimal('{:f}'.format(Decimal('1.23456789').normalize()))
Decimal('1.23456789')