Python中的字符串格式:显示没有小数点的价格

时间:2012-03-04 18:13:23

标签: python decimal string-formatting

我的美元价格为Decimal,精确度为.01(以分为单位)。

我希望以字符串格式显示它,就像收到消息"You have just bought an item that cost $54.12."

一样

问题是,如果价格恰好是圆的,我想只显示没有分数,如$54

如何在Python中完成此操作?请注意,我使用的是Python 2.7,所以我很乐意使用新式而不是旧式的字符串格式。

5 个答案:

答案 0 :(得分:6)

>>> import decimal
>>> n = decimal.Decimal('54.12') 
>>> print('%g' % n)
'54.12'
>>> n = decimal.Decimal('54.00') 
>>> print('%g' % n)
'54'

答案 1 :(得分:1)

我会做这样的事情:

import decimal

a = decimal.Decimal('54.12')
b = decimal.Decimal('54.00')

for n in (a, b):
    print("You have just bought an item that cost ${0:.{1}f}."
          .format(n, 0 if n == n.to_integral() else 2))

其中{0:.{1}f}表示使用第二个参数中的小数位数将第一个参数打印为float,第二个参数为0,当数字实际上等于其整数版本且{{1当我认为不是你想要的时候。

输出结果为:

  

你刚买了一件售价54.12美元的商品。

     

你刚买了一件售价54美元的商品

答案 2 :(得分:1)

回答来自Python Decimals format

>>> a=54.12
>>> x="${:.4g}".format(a)
>>> print x
   $54.12
>>> a=54.00
>>> x="${:.4g}".format(a)
>>> print x
   $54

答案 3 :(得分:0)

这是你想要的吗?

注意x是原始价格。

round = x + 0.5
s = str(round)
dot = s.find('.')
print(s[ : dot])

答案 4 :(得分:-1)

>>> dollars = Decimal(repr(54.12))
>>> print "You have just bought an item that cost ${}.".format(dollars)
You have just bought an item that cost $54.12.