如何格式化小数以始终显示 2 位小数?

新手上路,请多包涵

我想显示:

49 作为 49.00

和:

54.9 作为 54.90

不管小数点的长度或是否有任何小数位,我想显示一个 Decimal 有 2 个小数位,我想以一种有效的方式来做。目的是显示金钱价值。

例如, 4898489.00


对于内置 float 类型的类似问题,请参阅将 浮点数限制为两位小数

原文由 orokusaki 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
2 个回答

我想您可能正在使用 Decimal() 来自 decimal 模块的对象? (如果您需要精确到小数点后任意大数字的两位数精度,那么您绝对应该这样做,这就是您的问题标题所暗示的…)

如果是这样,文档的 Decimal FAQ 部分有一个问题/答案对,可能对您有用:

Q. 在有两位小数的定点应用中,有些输入有很多位,需要四舍五入。其他人不应该有多余的数字,需要进行验证。应该使用什么方法?

A. quantize() 方法四舍五入到固定的小数位数。如果设置了 Inexact 陷阱,它也可用于验证:

 >>> TWOPLACES = Decimal(10) ** -2       # same as Decimal('0.01')
>>> # Round to two places
>>> Decimal('3.214').quantize(TWOPLACES)
Decimal('3.21')
>>> # Validate that a number does not exceed two places
>>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Decimal('3.21')
>>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Traceback (most recent call last):
   ...
Inexact: None

下一个问题是

问:一旦我有了有效的两个位置输入,我如何在整个应用程序中保持不变?

如果您需要答案(以及许多其他有用信息),请参阅 文档的上述部分。此外,如果您将 Decimal 保留为小数点后两位数的精度(这意味着将所有数字保留在小数点左侧和小数点右侧两位以及不再……),然后将它们转换为字符串 str 将工作正常:

 str(Decimal('10'))
# -> '10'
str(Decimal('10.00'))
# -> '10.00'
str(Decimal('10.000'))
# -> '10.000'

原文由 Michał Marczyk 发布,翻译遵循 CC BY-SA 4.0 许可协议

您应该使用 新的格式规范 来定义您的值的表示方式:

 >>> from math import pi  # pi ~ 3.141592653589793
>>> '{0:.2f}'.format(pi)
'3.14'

该文档有时可能有点晦涩,因此我推荐以下更易于阅读的参考资料:

Python 3.6 引入了 文字字符串插值(也称为 f 字符串),因此现在您可以将上面的代码写得更简洁:

 >>> f'{pi:.2f}'
'3.14'

原文由 BioGeek 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题