数字格式从美分到美元

时间:2013-03-14 04:26:41

标签: python python-2.7 number-formatting

我正在尝试使用Python 2.7的字符串格式以美元输出十个苹果的成本,其中单位价格以美分提供。

我希望total_apple_cost的值为"10.00",但它是"1.001.001.001.001.001.001.001.001.001.00"

我已经包含了对其他变量的测试,以表明它们都按预期出现:

# define apple cost in cents
apple_cost_in_cents = 100
# define format string
cents_to_dollars_format_string = '{:,.2f}'
# convert 100 to 1.00
apple_cost_in_dollars = cents_to_dollars_format_string.format(apple_cost_in_cents / 100.)
# assign value of 'apple_cost_in_dollars' to 'apple_cost'
apple_cost = apple_cost_in_dollars
# calculate the total apple cost
total_apple_cost = 10 * apple_cost

# print out the total cost
print 'total apple cost: ' + str(total_apple_cost) + '\n'

#testing
print 'cost in cents: ' + str(apple_cost_in_cents) + '\n'
print 'cost in dollars: ' + str(apple_cost_in_dollars) + '\n'
print 'apple cost: ' + str(apple_cost) + '\n' 

溶液

感谢下面的答案,这两个答案都表明变量'apple_cost_in_dollars'是一个字符串。

我的解决方案是让它成为一个浮点数并保持其余的代码几乎相同:

apple_cost_in_cents = 100
cents_to_dollars_format_string = '{:,.2f}'
apple_cost_in_dollars = float(cents_to_dollars_format_string.format(apple_cost_in_cents / 100.))
apple_cost = apple_cost_in_dollars
total_apple_cost = 10 * apple_cost

print 'cost in cents: ' + str(apple_cost_in_cents) + '\n'

print 'cost in dollars: $''{:,.2f}'.format(apple_cost_in_dollars) + '\n'

print 'apple cost: $''{:,.2f}'.format(apple_cost) + '\n'

print 'total apple cost: $''{:,.2f}'.format(total_apple_cost) + '\n'

4 个答案:

答案 0 :(得分:4)

这是因为apple_cost_in_dollars是一个字符串,见下文

In [9]: cost = '1'

In [10]: cost * 10
Out[10]: '1111111111'

In [11]: cost = int('1')

In [12]: cost * 10
Out[12]: 10

答案 1 :(得分:2)

apple_cost是一个字符串,你乘以10(它只是重复10次字符串)。在将其格式化为字符串之前,请将转换为美元。

>>> apple_cost_in_cents = 100
>>> cents_to_dollars_format_string = '{:,.2f}'
>>> total_apple_cost_in_dollars_as_string = cents_to_dollars_format_string.format(10*apple_cost_in_cents/100.0)
>>> total_apple_cost_in_dollars_as_string
'10.00'

如果您想进一步使用格式化货币,可以查看locale模块,特别是locale.currency功能。

答案 2 :(得分:1)

>>> import locale
>>> apple_cost_in_cents = 100
>>> locale.setlocale(locale.LC_ALL, '')
'en_US.UTF-8'
>>> locale.currency(apple_cost_in_cents * 10 / 100)
'$10.00'

答案 3 :(得分:1)

它被格式化为字符串(文本)。所以,如果你写10 * string_variable,它只重复该字符串10次。最简单的方法是改变这一行:

total_apple_cost = 10 * apple_cost

为:

total_apple_cost = cents_to_dollars_format_string.format(10 * apple_cost_in_cents/100)