Валюта Python и отрицательные числа - PullRequest
0 голосов
/ 25 октября 2009

Почему?

C:\path\>manage.py shell
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.    

>>> import locale
>>> locale.getlocale()
('Spanish_Colombia', '1252')
>>> locale.currency( 1885, grouping=True )
'$ 1.885,00'
>>> locale.currency( -1885, grouping=True )
'($ 1.885,00)'

Не можете вернуть $ -1,885,00?

Ответы [ 2 ]

2 голосов
/ 25 октября 2009

Скобки вокруг числа, указывающие на то, что это дебет (то есть отрицательный), а не кредит (положительный), являются общим соглашением в бухгалтерском учете (я думаю, потому что скобки более заметны, чем маленький минус / тире впереди, важно отличать дебет от кредитов; -).

Итак, неудивительно, что многие локали выражают это соглашение как «правильный способ» форматировать отрицательные числа. Если вы хотите использовать некоторые части соглашений вашей локали, такие как знак $ и запятые, но не другие, такие как скобки, вам придется использовать abs (ваш номер) вместо просто вашего номера в качестве входных данных для локали. валюту, затем, если yournumber <0, сделайте небольшую манипуляцию со строкой, чтобы найти первую цифру и сформируйте новую строку с тире перед ней (или другие манипуляции со строками, в зависимости от вашего желаемого способа выразить отрицательные суммы - например, знак «минус» [тире] может идти перед символом валюты или справа от всей строки). </p>

Почему вы думаете, что тот, кто будет читать этот вывод, кстати, хочет, чтобы к нему применялись некоторые, но не все соглашения локали?

2 голосов
/ 25 октября 2009

В вашей локали, заключив число в скобки, вы указываете, что это отрицательное число. Проверьте это в Панели управления / Региональные и Языковые настройки, вероятно, Python подхватит их оттуда.

...