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')

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


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4