oro*_*aki 2 python scientific-notation decimal exponent python-2.7
我们在应用程序中向代理显示不带尾随零的百分比值(50%比现在更容易快速扫描50.000%),到目前为止,我们只是使用quantize强力标准化该值以删除尾随零。
今天早上我决定考虑使用它Decimal.normalize,但遇到了这个:
给定十进制值:
>>> value = Decimal('50.000')
Run Code Online (Sandbox Code Playgroud)
标准化该值:
>>> value = value.normalize()
Run Code Online (Sandbox Code Playgroud)
结果是:
>>> value
Decimal('5E+1')
Run Code Online (Sandbox Code Playgroud)
我理解值是相同的:
>>> Decimal('5E+1') == Decimal('50')
True
Run Code Online (Sandbox Code Playgroud)
但从非技术用户的角度来看,5E+1基本上是没有意义的。
有办法转换Decimal('5E+1')成Decimal('50')吗?
我不想做任何会改变 的值的事情Decimal(例如,完全删除小数位),因为该值可能是例如Decimal('33.333'). IOW,不要将我的50.000示例混淆为我们只处理整数。
出于输出格式化的目的,您可以使用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%
Run Code Online (Sandbox Code Playgroud)
如果出于某种原因,您确实想创建一个具有不同精度的新 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')
Run Code Online (Sandbox Code Playgroud)