将数字转换为人民币大写
2016-03-18 00:00
190 查看
将数字转换为人民币大写。
例如: 12058304.368元,转换为:壹仟贰佰零伍万捌仟叁佰零肆元叁角陆分
注:13位数字的金额已经不小了,万亿
例如: 12058304.368元,转换为:壹仟贰佰零伍万捌仟叁佰零肆元叁角陆分
注:13位数字的金额已经不小了,万亿
def num2chn(num): """ 将数字(数字字符串)转换为人民币大写 :param num: int、float或者str :return: 返回处理结果,发生错误返回None """ chr = ('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖') bit = ('分', '角', '元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万') # 例 324562.003 # 转换为 00265423 try: num = float(num) # 将数字反序排列,从右至左依次 num_str = ('%0.2f' % num).replace('.', '')[::-1] except ValueError: return None n = len(num_str) if n >= 15: return None result = [] for i in range(0, n): # 非圆、万、亿, if num_str[i] == "0" and i != 2 and i != 6 and i != 10: s = chr[0] elif num_str[i] == "0" and (i == 2 or i == 6 or i == 10): s = bit[i] else: s = bit[i] + chr[int(num_str[i])] result.append(s) # 从左值右重排字符串 rst = "".join(result)[::-1] # 去零,中间多个零合并为一个,尾部零全去, "零" == chr[0] # r = r"[零]+" r = "[" + chr[0] + "]+" rst = re.compile(r).sub(chr[0], rst).rstrip(chr[0]) # 去零元、零万、零亿 for i in [2, 6, 10]: rst = rst.replace(chr[0]+bit[i], bit[i]) if rst[-1] == bit[2]: rst += "整" print('%0.2f' % num) print(rst) return rst
相关文章推荐
- Qt入门-提示、警告、错误、询问、关于对话框
- nginx: [error] invalid PID number
- php动态程序生成静态文件示例
- php中session_save_path另一种用法
- W5200模块调试笔记
- SpringMVC注解总结
- SpringMVC中传参乱码解决方案
- 我在OSC的第一条博客
- 百度地图---之---路径规划
- 获取公众号所有用户的信息
- 获取微信用户信息
- 获取微信用户信息
- Android SDK Manager国内不能下载和下载缓慢的问题
- sql之left join、right join、inner join的区别
- 蜂窝教育Android培训 增强学员职场竞争力
- angularJS跳转返回刷新
- 大话设计模式—原型模式
- SQL个性化排序
- 论毛姆传
- Hibernate 实体与表映射注解