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

dav*_*gan 6 python currency string-formatting django-templates

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

1234 => 12.34
5 => 0.05
999 => 9.99
Run Code Online (Sandbox Code Playgroud)

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

小智 13

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

它可以像这样使用:

import decimal
cents = 999
dollars = decimal.Decimal(cents) / 100
print dollars
Run Code Online (Sandbox Code Playgroud)


D.S*_*ley 6

如果你不关心本地化,那么简单地除以100并格式化它:

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

如果你关心本地化,那么使用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'
Run Code Online (Sandbox Code Playgroud)


unu*_*tbu 5

使用str.format:

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

产量

12.34
0.05
9.99
Run Code Online (Sandbox Code Playgroud)

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