将Python Decimal对象格式化为指定的精度

Jos*_*rns 16 python decimal python-2.7 python-3.x

我花了无数个小时研究,阅读,测试,并最终对Python的Decimal对象缺乏最基本的概念感到困惑和沮丧:将Decimal的输出格式化为字符串.

假设我们有一些字符串或Decimal对象具有以下值:

   0.0008
  11.1111
 222.2222
3333.3333
1234.5678
Run Code Online (Sandbox Code Playgroud)

目标是简单地将Decimal的精度设置为小数点后第二位.例如,11.1111将被格式化为11.11,和1234.5678作为1234.57.

我设想类似于以下代码:

import decimal
decimals = [
  decimal.Decimal('0.0008'),
  decimal.Decimal('11.1111'),
  decimal.Decimal('222.2222'),
  decimal.Decimal('3333.3333'),
  decimal.Decimal('1234.5678'),
]
for dec in decimals:
  print dec.as_string(precision=2, rounding=ROUND_HALF_UP)
Run Code Online (Sandbox Code Playgroud)

结果输出将是:

0.00
11.11
222.22
3333.33
1234.57
Run Code Online (Sandbox Code Playgroud)

显然我们不能使用Decimal的上下文的精度,因为这考虑了TOTAL的位数,而不仅仅是小数精度.

我也没有兴趣将Decimal转换为float来输出它的值.Decimal背后的原因是避免在浮点数上存储和运行计算.

还有哪些其他解决方案?我知道堆栈溢出还有许多其他类似的问题,但我找不到解决我所询问的潜在问题.

非常感谢!

Mar*_*ers 27

只需使用字符串格式format()函数:

>>> for dec in decimals:
...    print format(dec, '7.2f')
... 
   0.00
  11.11
 222.22
3333.33
1234.57
Run Code Online (Sandbox Code Playgroud)

decimal.Decimal支持与浮点数相同的格式规范,因此您可以根据需要使用指数,固定点,常规,数字或百分比格式.

这是格式化小数的官方和pythonic方法; 的Decimal类实现.__format__()有效地处理这样的格式化方法.

  • @JoshuaBurns:这个*是输出格式化的内置接口. (3认同)
  • 这肯定回答了我的问题,非常感谢!我最关心的是format()在执行实际格式之前将值转换为float. (2认同)