Отрицательная валюта формата Python

До сих пор я не нашел ничего, что касалось бы форматирования отрицательной валюты, и это сводит меня с ума.

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)

Мне нужна скобка со знаком минус НЕ

Как избавиться от скобок и получить минус?


person user3279899    schedule 15.05.2015    source источник
comment
Забыл добавить эту строку кода: locale.setlocale(locale.LC_ALL, 'English_United States.1252')   -  person user3279899    schedule 15.05.2015
comment
Почему? Довольно часто используются круглые скобки для обозначения отрицательной валюты/   -  person kylieCatt    schedule 15.05.2015
comment
Еще забыл добавить, что это Windows 7 x64   -  person user3279899    schedule 17.05.2015
comment
Почему? Я храню данные в таблице pyQT, и мне нужно преобразовать их, чтобы поместить в таблицу, и преобразовать их. Будучи новичком, я не мог найти способ обойти ошибки при преобразовании строки в десятичное число. В ожидании я написал свою собственную функцию toCurrency, которая принимает QString, String или Decimal.   -  person user3279899    schedule 17.05.2015


Ответы (2)


Похоже, вы можете использовать _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

или вы можете использовать форматирование строки.

person John    schedule 15.05.2015

Это может быть не комплексный подход, который вы ищете, но если вы используете локаль 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
person Community    schedule 15.05.2015
comment
Я получаю эту ошибку: Traceback (последний последний вызов): Файл D:/Python Projects/Budget/Budget.pyw, строка 168, в ‹module› locale.setlocale(locale.LC_ALL, b'en_US.UTF-8') Файл C:\Python27\lib\locale.py, строка 579, в setlocale return _setlocale(category, locale) locale.Error: неподдерживаемая настройка локали - person user3279899; 17.05.2015
comment
@user3279899 user3279899 какая версия питона? - person ; 17.05.2015
comment
Python 2.7 — это версия, которую я использую. - person user3279899; 19.05.2015