可以在Python中将十进制('5E + 1')简单地转换为十进制('50')吗?

时间:2017-10-26 14:47:41

标签: python python-2.7 decimal exponent scientific-notation

上下文

我们在应用中向代理显示百分比值而没有尾随零(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}}示例,因为我们只处理整数。

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')