2009-10-24 126 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

相關問題