Python格式化负数货币

5

我还没有找到任何有关如何格式化负数货币的内容,这让我很烦恼。

from decimal import *
import re
import sys
import os
import locale


locale.setlocale( locale.LC_ALL, 'English_United States.1252' )
# cBalance is a running balance of type Decimal

fBalance = locale.currency( cBalance, grouping=True )
print cBalance, fBalance

负数的结果:

-496.06 ($496.06)

我需要一个减号而不是括号

如何去掉括号并使用减号?


忘记加上这行代码: locale.setlocale(locale.LC_ALL,‘English_United States.1252’) - Mike Sr
2
为什么?在编程中使用括号表示负数金额是非常普遍的。 - kylieCatt
还忘了补充一点,这是Windows 7 x64。 - Mike Sr
为什么要这样做呢?因为我正在将数据存储在pyQT表格中,必须将其转换为适合放置在表格中的格式,并在取出时进行转换。由于我是个新手,在进行字符串到十进制数转换时无法避免出现错误。在等待期间,我最终编写了自己的toCurrency函数,它可以接受一个QString、String或Decimal类型的参数。 - Mike Sr
3个回答

3

看起来你可以使用_override_localeconv字典(这有点不正规)。

import locale

cBalance = -496.06

locale.setlocale( locale.LC_ALL, 'English_United States.1252')
locale._override_localeconv = {'n_sign_posn':1}

fBalance = locale.currency(cBalance, grouping=True)
print cBalance, fBalance

或者你可以使用字符串格式化


1
这是一个基于Python 3的简单函数答案,需要您提供一个数字,并使用.format将金额固定为两个小数点:
def format_dollar_amount(amount):
    formatted_absolute_amount = '${:,.2f}'.format(abs(amount))
    if round(amount, 2) < 0:
        return f'-{formatted_absolute_amount}'
    return formatted_absolute_amount

以下是一些示例输出:

>>> format_dollar_amount(-1)
'-$1.00'

>>> format_dollar_amount(0)
'$0.00'

>>> format_dollar_amount(123)
'$123.00'

>>> format_dollar_amount(-0.00001)
'$0.00'

>>> format_dollar_amount(-15.2)
'-$15.20'

>>> format_dollar_amount(123456789)
'$123,456,789.00'

0

这可能不是您寻求的全面方法,但如果您使用区域设置en_US.UTF-8,您可以采用确定性方法处理负号-

import locale
locale.setlocale(locale.LC_ALL, b'en_US.UTF-8')

amount = locale.currency(-350, grouping=True)
print(amount) # -$350.00

amount = locale.currency(-350, grouping=True).replace('$', '')
print(amount) # -350.00

我遇到了这个错误:Traceback (most recent call last): File "D:/Python Projects/Budget/Budget.pyw", line 168, in <module> locale.setlocale(locale.LC_ALL, b'en_US.UTF-8') File "C:\Python27\lib\locale.py", line 579, in setlocale return _setlocale(category, locale) locale.Error: 不支持的区域设置 - Mike Sr
@user3279899,你用的是哪个版本的Python? - user3921265
我正在运行的版本是Python 2.7。 - Mike Sr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接