Skip to content

Instantly share code, notes, and snippets.

@alanljj
Created January 7, 2019 05:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alanljj/1a50f04fcb9a221481257ee3e86d6ee6 to your computer and use it in GitHub Desktop.
Save alanljj/1a50f04fcb9a221481257ee3e86d6ee6 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
###########################################################################
# GeekerMaster奇客大师 www.geekermaster.com
# Copyright 2018 ITGeeker <alanljj@gmail.com>
############################################################################
from openerp import models, fields, api
class GeekerRmbCapital(models.Model):
_name = 'geeker.rmb.capital'
_description = 'Geeker RMB Capital'
@api.model
def Num2MoneyFormat(self, change_number):
"""
.转换数字为大写货币格式( format_word.__len__() - 3 + 2位小数 )
change_number 支持 float, int, long, string
"""
format_word = ["分", "角", "元",
"拾", "百", "千", "万",
"拾", "百", "千", "亿",
"拾", "百", "千", "万",
"拾", "百", "千", "兆"]
format_num = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]
if type(change_number) == str:
# - 如果是字符串,先尝试转换成float或int.
if '.' in change_number:
try:
change_number = float(change_number)
except:
raise ValueError, '%s can\'t change' % change_number
else:
try:
change_number = int(change_number)
except:
raise ValueError, '%s can\'t change' % change_number
if type(change_number) == float:
real_numbers = []
for i in range(len(format_word) - 3, -3, -1):
if change_number >= 10 ** i or i < 1:
real_numbers.append(
int(round(change_number/(10**i), 2) % 10))
elif isinstance(change_number, (int, long)):
real_numbers = [int(i) for i in str(change_number) + '00']
else:
raise ValueError, '%s can\'t change' % change_number
zflag = 0 # 标记连续0次数,以删除万字,或适时插入零字
start = len(real_numbers) - 3
change_words = []
for i in range(start, -3, -1): # 使i对应实际位数,负数为角分
if 0 <> real_numbers[start-i] or len(change_words) == 0:
if zflag:
change_words.append(format_num[0])
zflag = 0
change_words.append(format_num[real_numbers[start - i]])
change_words.append(format_word[i+2])
elif 0 == i or (0 == i % 4 and zflag < 3): # 控制 万/元
change_words.append(format_word[i+2])
zflag = 0
else:
zflag += 1
if change_words[-1] not in (format_word[0], format_word[1]):
# - 最后两位非"角,分"则补"整"
change_words.append("整")
return ''.join(change_words)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment