如何使用Python字符串格式将表示美分的整数转换为表示美元的浮点数?

时间:2011-12-26 16:53:48

标签: python django-templates string-formatting currency

我有一个整数表示以美分为单位的价格。使用Python格式字符串,如何将此值转换为带有两位小数的美元?例子:

1234 => 12.34
5 => 0.05
999 => 9.99
编辑:我应该给一些背景知识。我将价格存储在数据库中作为整数,以确保我不会失去精度。我不想使用Decimal数据类型,因为这些值也将用于Javascript中的计算,因此整数最简单。我希望能够使用stringformat标签在Django模板中显示格式化的值。因此,将数字除以100不起作用。有没有办法在不分割的情况下添加小数点?

3 个答案:

答案 0 :(得分:13)

你应该尽量避免使用花车代表金钱(数字不准确可能太容易蔓延)。十进制模块提供了一种有用的数据类型来表示货币,因为它可以精确地表示十进制数,例如0.05。

可以像这样使用:

import decimal
cents = 999
dollars = decimal.Decimal(cents) / 100
print dollars

答案 1 :(得分:6)

如果您不关心本地化,那么只需除以100并格式化:

>>> for cents in [ 1234, 5, 999 ]:
...     '{0:.02f}'.format(float(cents) / 100.0)
...
'12.34'
'0.05'
'9.99'

如果您关心本地化,请使用locale模块:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, "") # use the user-default locale
'en_US.UTF-8'
>>> for cents in [ 1234, 5, 999 ]:
...     locale.currency(float(cents) / 100.0)
...
'$12.34'
'$0.05'
'$9.99'

答案 2 :(得分:5)

使用str.format

for i in (1234,5,999):
    print('{:.2f}'.format(i/100.))

产量

12.34
0.05
9.99

在Python2.6中使用'{0:.2f}'而不是'{:.2f}'