Python 本地化货币与负数

1 投票
2 回答
2901 浏览
提问于 2025-04-15 15:20

为什么呢?

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

在你的地区,数字如果用括号括起来,就表示这个数字是负数。你可以在控制面板的区域和语言设置里查看这个设置,Python 可能是从这里获取这个信息的。

2

在会计中,数字周围加上括号表示这是一个借方(也就是负数),而不是贷方(正数),这是一个很常见的习惯做法。这样做的原因可能是括号比前面的小减号更显眼,而区分借方和贷方是非常重要的。

所以,很多地方都把这种用法视为格式化负数的“正确方式”也就不足为奇了。如果你想使用你所在地区的一些格式,比如美元符号和逗号,但不想使用括号,那么你需要用abs(yournumber)来代替直接使用yournumber作为locale.currency的输入。然后,如果yournumber小于0,你就得做一些字符串处理,找到第一个数字,并在它前面加上减号,形成一个新的字符串(或者根据你想要的负数表达方式进行其他字符串处理,比如减号可以放在货币符号前面,或者整个字符串的右边)。

顺便问一下,你觉得阅读这个输出的人为什么会希望只应用部分而不是全部的地区格式呢?

撰写回答