2009-10-24 124 views
0

为什么?python区域设置货币和负数

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

数字周围的圆括号表示它是借方(即负数),而不是信用(正数),这是会计惯例(我猜是因为括号比前面的小负/短划线更明显,并且将借方和贷方区分开来是至关重要的;-)。

因此,很多地区表示该惯例作为格式负数的“正确方法”并不令人惊讶。如果要使用语言环境约定的某些部分(例如$符号和逗号),而不是其他语言环境(如括号),则必须使用abs(yournumber)而不仅仅是您的编号作为语言环境的输入。货币,那么,如果您的号码为< 0,请执行一些小的字符串操作来查找第一个数字并在其前面形成一个带有破折号的新字符串(或其他字符串操作,具体取决于您希望表达负数的方式 - 例如符号“minus”[破折号]可以在货币符号之前,或在整个字符串的右侧)。

顺便说一句,为什么你认为谁会阅读那个输出结果需要一些场所的惯例来适用它呢?

2

在您的语言环境中,围绕带括号的数字表示它是负数。在“控制面板/区域和语言”设置中检查这一点,Python可能会从中选择它。

+0

>>> locale.setlocale(locale.LC_ALL, '') 'English_United States.1252' >>> locale.currency(-1885,分组=真) '($ 1,885.00)' - 所以,它不是只有我的语言环境。为什么? – panchicore 2009-10-24 20:43:57

+0

“Python可能从那里捡起它”。不完全正确。这定义了区域设置格式。 Python总是找到OS提供的Locale格式。这是一个操作系统问题 - 操作系统定义了哪些语言环境。 – 2009-10-24 21:30:43

相关问题