【问题标题】:Python format negative currencyPython格式负货币
【发布时间】:2015-07-27 07:47:12
【问题描述】:

到目前为止,我还没有找到任何解决如何格式化负货币的方法,这让我发疯。

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)

我需要一个减号NOT括号

如何去掉括号并得到减号?

【问题讨论】:

  • 忘记添加这行代码:locale.setlocale(locale.LC_ALL, 'English_United States.1252')
  • 为什么?使用括号来表示负货币是很常见的/
  • 也忘了补充这是Windows 7 x64
  • 为什么?我将数据存储在 pyQT 表中,我必须将其转换为将其放入表中并将其转换出来。作为一个新手,在将字符串转换为十进制时,我找不到解决错误的方法。在等待期间,我最终编写了自己的 toCurrency 函数,该函数接受 QString、String 或 Decimal。

标签: python formatting currency negative-number


【解决方案1】:

看起来你可以使用_override_localeconv dict(这有点骇人听闻)。

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

或者你可以使用string formatting

【讨论】:

    【解决方案2】:

    这可能不是您寻求的综合方法,但如果您使用语言环境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(最近一次调用最后一次):文件“D:/Python Projects/Budget/Budget.pyw”,第 168 行,在 locale.setlocale(locale.LC_ALL , b'en_US.UTF-8') 文件“C:\Python27\lib\locale.py”,第 579 行,在 setlocale 中返回 _setlocale(category, locale) locale.Error: unsupported locale setting
    • @user3279899 什么版本的python?
    • Python 2.7 是我正在运行的版本
    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2012-01-22
    相关资源
    最近更新 更多