def convert_currency_to_float(self, text):
"""
大写金额转小写金额
:param text:
:return:
"""
for i in (("万万", "亿"), ("点", "元"), ("块", "元"), ("毛", "角"), (" ", '')):
text = text.replace(i[0], i[1])
v_result = 0
v_number = 0
v_temp = 0
v_decimal = 0
text = re.sub(
r"[^两二四五十角亿百幺叁千分捌七陆万仟伍整一八肆拾壹柒佰贰元六玖三九零]",
'',
text
)
if text.startswith("元"):
text = text[1:]
for char in text:
i = "零一二三四五六七八九".find(char)
if i < 0:
i = "零幺两三四五六七八九".find(char)
if i < 0:
i = "零壹贰叁肆伍陆柒捌玖".find(char)
if i > 0:
v_number = i
if v_decimal > 0:
v_result += v_number * math.pow(10, -v_decimal)
v_decimal += 1
v_number = 0
else:
i = "元十百千万亿".find(char)
if i < 0:
i = "整拾佰仟万亿".find(char)
if i == 5:
i = 8
if i > 0:
if i >= 4:
v_temp += v_number
if v_temp == 0:
v_temp = 1
v_result += v_temp * math.pow(10, i)
v_temp = 0
else:
v_temp += v_number * math.pow(10, i)
else:
i = "元角分".find(char)
if i > 0:
v_temp += v_number
v_result += v_temp * math.pow(10, - i)
v_temp = 0
elif i == 0:
v_temp += v_number
v_result += v_temp
v_decimal = 1
v_temp = 0
v_number = 0
print('%.2f' % (v_result + v_temp + v_number))
return round(v_result + v_temp + v_number, 4)
def small_big(self, value):
"""
人民币小写转化为人民币大写
传入浮点类型的值返回 unicode 字符串
"""
map = [u"零", u"壹", u"贰", u"叁", u"肆", u"伍", u"陆", u"柒", u"捌", u"玖"]
unit = [u"分", u"角", u"元", u"拾", u"百", u"千", u"万", u"拾", u"百", u"千", u"亿",
u"拾", u"百", u"千", u"万", u"拾", u"百", u"千", u"兆"]
nums = []
for i in range(len(unit) - 3, -3, -1):
if value >= 10 ** i or i < 1:
nums.append(int(round(value / (10 ** i), 2)) % 10)
words = []
zflag = 0
start = len(nums) - 3
for i in range(start, -3, -1):
if 0 != nums[start - i] or len(words) == 0:
if zflag:
words.append(map[0])
zflag = 0
words.append(map[nums[start - i]])
words.append(unit[i + 2])
elif 0 == i or (0 == i % 4 and zflag < 3):
words.append(unit[i + 2])
zflag = 0
else:
zflag += 1
if words[-1] != unit[0]:
words.append(u"整")
return ''.join(words)