将浮动转换为美元和美分

时间:2014-01-18 18:47:08

标签: python python-3.x floating-point string-formatting currency

首先,我试过这篇文章(其中包括):Currency formatting in Python。它对我的变量没有影响。我最好的猜测是,因为我使用的是Python 3,而且是Python 2的代码。(除非我忽略了一些东西,因为我是Python的新手)。

我想将一个浮点数(例如1234.5)转换为字符串,例如“$ 1,234.50”。我该怎么做呢?

以防万一,这是我编译的代码,但不影响我的变量:

money = float(1234.5)
locale.setlocale(locale.LC_ALL, '')
locale.currency(money, grouping=True)

也不成功:

money = float(1234.5)
print(money) #output is 1234.5
'${:,.2f}'.format(money)
print(money) #output is 1234.5

6 个答案:

答案 0 :(得分:102)

在Python 3.x和2.7中,您可以这样做:

>>> '${:,.2f}'.format(1234.5)
'$1,234.50'

:,将逗号添加为千位分隔符,.2f将字符串限制为两位小数(或添加足够的零以达到2位小数,视具体情况而定)at结束。

答案 1 :(得分:11)

在@ JustinBarber的示例基础上,并注意@ eric.frederich的评论,如果您想格式化负值,例如-$1,000.00而不是$-1,000.00,并且不想使用locale:< / p>

def as_currency(amount):
    if amount >= 0:
        return '${:,.2f}'.format(amount)
    else:
        return '-${:,.2f}'.format(-amount)

答案 2 :(得分:9)

在python 3中,您可以使用:

import locale
locale.setlocale( locale.LC_ALL, 'English_United States.1252' )
locale.currency( 1234.50, grouping = True )

输出

'$1,234.50'

答案 3 :(得分:0)

我个人更喜欢这种方式(当然,这只是编写当前选择的“最佳答案”的一种不同方式):

money = float(1234.5)
print('$' + format(money, ',.2f'))

或者,如果您真的不喜欢“添加”多个字符串来组合它们,则可以改为:

money = float(1234.5)
print('${0}'.format(format(money, ',.2f')))

我只是认为这两种样式都比较容易阅读。 :-)

(当然,您仍然可以结合If-Else来处理Eric所建议的负值)

答案 4 :(得分:-1)

df_buy['BUY'] = df_buy['BUY'].astype('float')
df_buy['BUY'] = ['€ {:,.2f}'.format(i) for i in list(df_buy['BUY'])]

答案 5 :(得分:-2)

你说:

`mony = float(1234.5)
print(money)      #output is 1234.5
'${:,.2f}'.format(money)
print(money)

没用...... 你准确地编码了吗? 这应该有效(见差别很小):

money = float(1234.5)      #next you used format without printing, nor affecting value of "money"
amountAsFormattedString = '${:,.2f}'.format(money)
print( amountAsFormattedString )