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

10 投票
3 回答
7484 浏览
提问于 2025-04-17 09:02

我有一个整数,表示以美分为单位的价格。使用Python的格式字符串,我该如何把这个值转换成美元,并且保留两位小数呢?举个例子:

1234 => 12.34
5 => 0.05
999 => 9.99

补充说明:我应该给点背景信息。我把价格存储在数据库里,使用整数是为了确保不会丢失精度。我不想使用Decimal这种数据类型,因为这些值还会在JavaScript中进行计算,所以用整数会更简单。我希望能在Django模板中使用stringformat标签显示格式化后的值。因此,直接把这个数字除以100是不行的。有没有办法在不除的情况下加上小数点呢?

3 个回答

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'
7

使用 str.format 方法:

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

会得到

12.34
0.05
9.99

在 Python2.6 中,使用 '{0:.2f}' 代替 '{:.2f}'

16

你应该尽量避免使用浮点数来表示金钱,因为这样容易出现数字不准确的问题。相反,decimal模块提供了一种很有用的数据类型,可以准确地表示像0.05这样的十进制数字,非常适合用来处理钱。

你可以这样使用它:

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

撰写回答