站点图标 ITGeeker技术奇客

Python实现人民币大写 金额为负时显示错误时的解决方法

GeekerMaster奇客大师用Odoo开发的一些订单和结算报表都包括金额的人民币大写,采用Num2MoneyFormat的方法,不知道当初是谁分享了这段代码,反正它拯救了很多程序猿的时间。

取自于斯,分享与斯。这里ITGeeker技术奇客也分享一下改写的Odoo人民币大写转换Python代码@api 8(gist@github):

使用此段代码创建一个模块,然后在别的模块调用就可以了,调用代码Sample:

    # compute balance RMB
    @api.one
    @api.depends('balance')
    def compute_balance_cn(self):
        if self.balance:
            self.balance_cn = self.env['geeker.rmb.capital'].Num2MoneyFormat(
                self.balance)

    balance_cn = fields.Char(
        'Renminbi (RMB)', compute=compute_balance_cn, readonly=True, store=True, track_visibility='onchange')

问题: 金额为负时显示大写不正确

当然最好的解决方法是自己修改源代码解决这个问题,但稍显复杂,也不知道是否会引起别的问题,毕竟是抄的别人的代码。如果有大神愿意指点就更好了。

那就抄近路变通方式吧,更改前面的调用代码为:

    # compute balance RMB
    @api.one
    @api.depends('balance')
    def compute_balance_cn(self):
        if self.balance >= 0.00:
            self.balance_cn = self.env['geeker.rmb.capital'].Num2MoneyFormat(
                self.balance)
        else:
            balance_cn_minus = 0 - self.balance
            self.balance_cn = '- ' + self.env['geeker.rmb.capital'].Num2MoneyFormat(
                balance_cn_minus)

    balance_cn = fields.Char(
        'Renminbi (RMB)', compute=compute_balance_cn, readonly=True, track_visibility='onchange')

把负的金额变成正的,然后再计算出来的人民币大写前面加上一个负号“-”,你也可以改成你想要的其他字符,例如“倒欠”等。

退出移动版