I have an integer representing a price in cents. Using Python format strings, how can I convert this value into dollars with two decimal places? Examples:
1234 => 12.34
5 => 0.05
999 => 9.99
EDIT: I should give some background. I am storing prices in a database as integers in order to make sure I don't loose precision. I don't want to use the Decimal datatype because these values will also be used in calculations in Javascript, so integers will be simplest to work with for that. I want to be able to display in a Django template the formatted value using the stringformat tag. As such, dividing the number by 100 doesn't work. Is there a way to add the decimal point without dividing?
You should try hard to avoid ever using floats to represent money (numerical inaccuracy can too easily creep in). The decimal module provides a useful datatype for representing money as it can exactly represent decimal numbers such as 0.05.
It can be used like this:
import decimal
cents = 999
dollars = decimal.Decimal(cents) / 100
print dollars
If you don't care about localization, then simply divide by 100 and format it:
>>> for cents in [ 1234, 5, 999 ]:
... '{0:.02f}'.format(float(cents) / 100.0)
...
'12.34'
'0.05'
'9.99'
If you do care about localization, then use the locale
module:
>>> 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'
Using str.format:
for i in (1234,5,999):
print('{:.2f}'.format(i/100.))
yields
12.34
0.05
9.99
In Python2.6 use '{0:.2f}'
instead of '{:.2f}'
.
来源:https://stackoverflow.com/questions/8637628/how-to-use-python-string-formatting-to-convert-an-integer-representing-cents-to