python数字转换为大写中文_python 人民币数字转汉字大写金额
1 '''
2 人民币数字转大写汉字3 '''
4
5 #coding: utf-8
6 importwarnings7 from decimal importDecimal8
9 def cncurrency(value, capital=True, prefix=False, classical=None):10 '''
11 参数:12 capital: True 大写汉字金额13 False 一般汉字金额14 classical: True 元15 False 圆16 prefix: True 以'人民币'开头17 False, 无开头18 '''
19 if notisinstance(value, (Decimal, str, int)):20 msg = '''
21 由于浮点数精度问题,请考虑使用字符串,或者 decimal.Decimal 类。22 因使用浮点数造成误差而带来的可能风险和损失作者概不负责。23 '''
24 warnings.warn(msg, UserWarning)25 #默认大写金额用圆,一般汉字金额用元
26 if classical isNone:27 classical = True if capital elseFalse28
29 #汉字金额前缀
30 if prefix isTrue:31 prefix = '人民币'
32 else:33 prefix = ''
34
35 #汉字金额字符定义
36 dunit = ('角', '分')37 ifcapital:38 num = ('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖')39 iunit = [None, '拾', '佰', '仟', '万', '拾', '佰', '仟','亿', '拾', '佰', '仟', '万', '拾', '佰', '仟']40 else:41 num = ('〇', '一', '二', '三', '四', '五', '六', '七', '八', '九')42 iunit = [None, '十', '百', '千', '万', '十', '百', '千','亿', '十', '百', '千', '万', '十', '百', '千']43 ifclassical:44 iunit[0] = '元' if classical else '圆'
45 #转换为Decimal,并截断多余小数
46
47 if notisinstance(value, Decimal):48 value = Decimal(value).quantize(Decimal('0.01'))49
50 #处理负数
51 if value <0:52 prefix += '负' #输出前缀,加负
53 value = - value #取正数部分,无须过多考虑正负数舍入
54 #assert - value + value == 0
55 #转化为字符串
56 s =str(value)57 if len(s) > 19:58 raise ValueError('金额太大了,不知道该怎么表达。')59 istr, dstr = s.split('.') #小数部分和整数部分分别处理
60 istr = istr[::-1] #翻转整数部分字符串
61 so = [] #用于记录转换结果
62
63 #零
64 if value ==0:65 return prefix + num[0] +iunit[0]66 haszero = False #用于标记零的使用
67 if dstr == '00':68 haszero = True #如果无小数部分,则标记加过零,避免出现“圆零整”
69
70 #处理小数部分
71 #分
72 if dstr[1] != '0':73 so.append(dunit[1])74 so.append(num[int(dstr[1])])75 else:76 so.append('整') #无分,则加“整”
77 #角
78 if dstr[0] != '0':79 so.append(dunit[0])80 so.append(num[int(dstr[0])])81 elif dstr[1] != '0':82 so.append(num[0]) #无角有分,添加“零”
83 haszero = True #标记加过零了
84
85 #无整数部分
86 if istr == '0':87 if haszero: #既然无整数部分,那么去掉角位置上的零
88 so.pop()89 so.append(prefix) #加前缀
90 so.reverse() #翻转
91 return ''.join(so)92
93 #处理整数部分
94 for i, n inenumerate(istr):95 n =int(n)96 if i % 4 == 0: #在圆、万、亿等位上,即使是零,也必须有单位
97 if i == 8 and so[-1] == iunit[4]: #亿和万之间全部为零的情况
98 so.pop() #去掉万
99 so.append(iunit[i])100 if n == 0: #处理这些位上为零的情况
101 if not haszero: #如果以前没有加过零
102 so.insert(-1, num[0]) #则在单位后面加零
103 haszero = True #标记加过零了
104 else: #处理不为零的情况
105 so.append(num[n])106 haszero = False #重新开始标记加零的情况
107 else: #在其他位置上
108 if n != 0: #不为零的情况
109 so.append(iunit[i])110 so.append(num[n])111 haszero = False #重新开始标记加零的情况
112 else: #处理为零的情况
113 if not haszero: #如果以前没有加过零
114 so.append(num[0])115 haszero =True116
117 #最终结果
118 so.append(prefix)119 so.reverse()120 return ''.join(so)121
122 i=input('请输入金额:')123 print (cncurrency(i))
python数字转换为大写中文_python 人民币数字转汉字大写金额相关推荐
- JS 实现数字转换为大写中文金额
数字转换为大写中文金额 function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁', '肆' ...
- VB:将数字转换为大写中文
方法1: 程序代码: Const strN = "零壹贰叁肆伍陆柒捌玖" Const strG = "拾佰仟万亿" Const intN = "012 ...
- 金钱数字转换为大写中文
效果图如下: private void zhuanhuan_Click(object sender, EventArgs e) { ...
- python数字转换为大写中文_阿拉伯数字金额转中文大写 (python实现)
分析 实现 # -*- coding: utf-8 -*- from __future__ import unicode_literals def convert(n): units = ['', ' ...
- Python实现将数字转换为大写中文
实现代码一 代码较为简洁,原文链接:https://www.jianshu.com/p/9aeba09cf71e import re from decimal import Decimal, ROUN ...
- python数字转中文大写_python 数字转换为大写
在会计的时候,用到将数字转换为大写,也就是讲数字转为汉字 外汇出入金流程https://www.fx61.com/supportclass cnumber: cdict = {} gdict = {} ...
- 【Java】将数字金额转换为大写中文金额
package com.ruoyi.test;import org.apache.commons.lang3.StringUtils;/*** @Title: ConvertUpMoney* @Des ...
- 用JQuery方法,将会计数字转换为大写
最近结了一单任务,编写OA里的差旅费报销.要求将填写的数字按位数逐个填入表单中,并自动转换为中文大写.如下图:1处为传递来的数据,通过JS拆分填入2,再转为大写填入3处. 这里主要介绍"数字 ...
- JS数字转大写中文“一,二,三“
数字转大写中文 toChineseNum(12345)const toChinesNum = (num) => {let changeNum = ['零', '一', '二', '三', '四' ...
最新文章
- python黑科技库:FuckIt.py,让你代码从此远离bug
- Java Mail 邮件发送(一):入门Demo
- ARCore中根据屏幕坐标计算射线的算法
- [转]SQL2005后的ROW_NUMBER()函数的应用
- 学习Raft算法的笔记
- mysql笔记手写_MySQL 笔记(一)
- 数据结构与与算法之插入排序
- 思步网6月底再次重磅出击:《CrystalBall User Manual 7.3(水晶球操作手册7.3)中英文对照版》
- BigDecimal除法报错:java.lang.ArithmeticException: Division undefined
- 多功能域名检测集合工具
- CSS - less
- 从互联网大厂跳槽到国企后,我发现没有一劳永逸的工作。。。
- 黄蓝专场之 | 小蓝单车生死故事
- Obi - Advanced Rope Simulation 绳索插件学习文档
- 可以插卡的ipad_可以插卡的ipad是几代
- android高分段进阶攻略(9)——ViewPager补间动画实现京东广告Banner
- uni-app服务器端搭建
- Python办公自动化|批量生成请假条
- Day_04 传智健康项目-预约管理-套餐管理
- Java编程思想总结篇(1-11章学习笔记)——第五章
热门文章
- 解读电商平台10大促销活动类型
- 1003. Universal Travel Sites (35)解题报告
- java 16进制格式化_hutool系列教材 (三)- 编码工具 - Java 16进制工具
- xxl-job新增执行器
- android时间格式am pm,将字符串在12(PM / AM)小时AM PM时间转换为24小时时间android
- 空间统计(二)分析模式 A
- 汽车机油的作用及分类、标号和级别的知识
- 堆叠泛化(Stacking Generalization)
- 从城市场景语义分割数据集中划分出自动驾驶领域道路分割数据集类别中遇到的问题
- kdj超卖_KDJ买入形态:D线进入超卖区间