【问题标题】:Number formatting from cents to dollars从美分到美元的数字格式
【发布时间】:2013-03-14 04:26:40
【问题描述】:

我正在尝试使用 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'

【问题讨论】:

    标签: python python-2.7 number-formatting


    【解决方案1】:

    这是因为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
    

    【讨论】:

      【解决方案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 函数。

      【讨论】:

        【解决方案3】:
        >>> 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'
        

        【讨论】:

          【解决方案4】:

          它被格式化为字符串(文本)。所以如果你写 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)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多