如何使用Python字符串格式将表示分的整数转换为表示美元的浮点数?
我有一个整数,表示以美分为单位的价格。使用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