中文金额大写转换处理
2019独角兽企业重金招聘Python工程师标准>>>
/** 金额单位(整数) */private final static String[] PRCE_UNIT = new String[] {"仟", "佰", "拾", "兆", "仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "圆"};/** 大写数字 */private final static Map<String, String> UPER_NMBR = new HashMap<String, String>();/** 大写数字初始化 */static {// 零UPER_NMBR.put("0", "零");// 壹UPER_NMBR.put("1", "壹");// 贰UPER_NMBR.put("2", "贰");// 叁UPER_NMBR.put("3", "叁");// 肆UPER_NMBR.put("4", "肆");// 伍UPER_NMBR.put("5", "伍");// 陆UPER_NMBR.put("6", "陆");// 柒UPER_NMBR.put("7", "柒");// 捌UPER_NMBR.put("8", "捌");// 玖UPER_NMBR.put("9", "玖");}/*** 中文金额大写转换处理。<br/>** @param nmbr 被转换金额* @param unitLgth 单位长度<br/>(2:拾;3:佰;4:仟:5:万;6:拾万;7:佰万;8:仟万:9:亿;10:拾亿;11:佰亿;12:仟亿:13:兆; 以外:圆)* @param String - 大写金额*/public final static String fmatPrceUperCN(String nmbr, int unitLgth) {// 不截取小数位数据转换final String chgeNmbr = LCSUtil.paseBigDcml(nmbr, "0", -1).toString();// 圆金额单位标识final boolean yuanUnitFlag = (unitLgth < 2 || unitLgth > 13);// 整数、小数截取final String[] nmbrMatx = chgeNmbr.split("\\.");// 整数部分String befo = nmbrMatx[0];// 小数部分String aftr = null;// 小数部分存在判断if (nmbrMatx.length > 1) {// 存在时,初始化小数位aftr = nmbrMatx[1];}// 整合结果对象初始化final StringBuffer mony = new StringBuffer();// 金额String prce = null;// 单位String unit = null;// 整数部分金额存在判断if (!LCSUtil.isEmpty(befo)) {// 起始位置int begnIndx = PRCE_UNIT.length - befo.length();// 整数部分遍历for (int i = 0, l = befo.length(); i < l; i++, begnIndx++) {// 金额prce = befo.substring(i, i + 1);// 单位unit = PRCE_UNIT[begnIndx];// 是否数字零if ("0".equals(prce)) {// 零时的特殊逻辑处理if ("兆".equals(unit) || "亿".equals(unit) || "万".equals(unit) || "圆".equals(unit)) {// 零结尾判断if (mony.lastIndexOf("零") == (mony.length() - 1)) {// 零时,剔除该字符if (mony.length() > 0) {// 部分金额存在时,剔除最后一个字符零mony.replace(mony.length() - 1, mony.length(), "");} else {// 不存在时,即零圆mony.append("零");}}// 单位累计mony.append(unit);} else if (mony.lastIndexOf("零") != (mony.length() - 1)) {// 非零结尾时,追加零字符mony.append("零");}} else {// 上记以外时,正常金额单位累计mony.append(UPER_NMBR.get(prce).concat(unit));}}}// 圆金额单位标识判断if (!yuanUnitFlag) {// 非圆金额单位时,圆单位结尾条件判断if (mony.lastIndexOf("圆") == (mony.length() - 1)) {// 剔除最后一个金额单位mony.replace(mony.length() - 1, mony.length(), "");}}// 圆金额单位标识判断if (yuanUnitFlag) {// 圆金额单位时,小数位存在判断if (LCSUtil.isEmpty(aftr) || aftr.startsWith("00") || "0".equals(aftr)) {// 无小数位或零结尾时,整数金额存在判断if (mony.length() > 0) {// 存在时,整金额字符追加mony.append("整");}} else {// 小数位if (aftr.length() > 1) {// 分值是否为零判断if ("0".equals(aftr.substring(1, 2))) {// 为零时,即角单位值mony.append(UPER_NMBR.get(aftr.substring(0, 1)).concat("角"));} else if ("0".equals(aftr.substring(0, 1))) {// 为零时,即分单位值mony.append("零".concat(UPER_NMBR.get(aftr.substring(1, 2))).concat("分"));} else {// 角单位值mony.append(UPER_NMBR.get(aftr.substring(0, 1)).concat("角"));// 分单位值mony.append(UPER_NMBR.get(aftr.substring(1, 2)).concat("分"));}} else if (aftr.length() > 0) {// 角单位值mony.append(UPER_NMBR.get(aftr.substring(0, 1)).concat("角"));}}} else if (!LCSUtil.isEmpty(aftr)) {// 非圆金额单位,且存在小数位时,分隔符点设置mony.append("点");// 小数位信息转换for (int i = 0, l = aftr.length(); i < l; i++) {// 数字大写转换mony.append(UPER_NMBR.get(aftr.substring(i, i + 1)));}}// 圆金额单位标识判断if (!yuanUnitFlag) {// 结尾是否为零判断while ("零".equals(mony.substring(mony.length() - 1))) {// 剔除最后一个数字零处理mony.replace(mony.length() - 1, mony.length(), "");}// 剔除小数位后的零之后,判断是否仍存在小数位if ("点".equals(mony.substring(mony.length() - 1))) {// 无小数位时,剔除最后一个分隔符点处理mony.replace(mony.length() - 1, mony.length(), "");}// 非圆金额单位时,金额单位设置switch (unitLgth) {case 3: // 3:佰mony.append("佰圆");break;case 4: // 4:仟mony.append("仟圆");break;case 5: // 5:万mony.append("万圆");break;case 6: // 6:拾万mony.append("拾万圆");break;case 7: // 7:佰万mony.append("佰万圆");break;case 8: // 8:仟万mony.append("仟万圆");break;case 9: // 9:亿mony.append("亿圆");break;case 10: // 10:拾亿mony.append("拾亿圆");break;case 11: // 11:佰亿mony.append("佰亿圆");break;case 12: // 12:仟亿mony.append("仟亿圆");break;case 13: // 13:兆mony.append("兆圆");break;default: // 2:拾mony.append("拾圆");break;}// 整合结果后,判断是否仍存在小数位if (mony.indexOf("点") < 0) {// 无小数位时,整金额结果结尾mony.append("整");}}// // 调试日志
// System.out.println("金额: ".concat(chgeNmbr).concat("\t大写:").concat(mony.toString()));// 大写金额返回return mony.toString();}以上源码版权归 LvCreator 所有,仅供参考使用...
转载于:https://my.oschina.net/lvcreator/blog/397089
中文金额大写转换处理相关推荐
- mysql金额数字转成中文_数字金额大写转换(可以处理整数,小数,负数)
数字金额大写转换(可以处理整数,小数,负数) 代码 //数字金额大写转换 function upDigit(n) { var fraction = ['角', '分']; var digit = [' ...
- 在英文版的excel中把数字转换成中文金额大写
用VBA自定义一个大写金额转换的函数,在公式中输入此函数名就可以了. 具体方法:按 Alt+F11 ,在VBA编辑器菜单中点 插入→模块,将下面的函数复制到插入的模块当中, '============ ...
- Java版 数字金额大写转换
需求:读入一个浮点数值,将其转化为中文金额的大写形式.如123.45,转化为:壹佰贰拾叁元肆角伍分. 以下是各种情况要完善: 1. 当金额为整数,只表示整数部分,省略小数部分,并添加"整&q ...
- 大数值金额大写转换(C语言)
关于大数值金额大写转换,在财务管理的应用方面没什么意义.一般来说,千亿级,万亿级的数值就够了.因为在国家级层面是以亿为单位的,也就表达为千万亿,万万亿.在企业层面数值金额转换设置到千亿.万亿就行了.大 ...
- 数字金额大写转换Java工具类
Mark一下: 摘取自 若依框架com.hanhua.common.core.text.Convert /*** 数字金额大写转换 先写个完整的然后将如零拾替换成零** @param n 数字* @r ...
- [收藏|转贴]货币金额大写转换库(C#)
货币金额大写转换库 http://www.vckbase.com/bbs/prime/viewprime.asp?id=576 // 货币金额大写转换库 Money2String.dll // 静 ...
- JAVA----数字金额大写转换
数字金额大写转换 先写个完整的然后将如零拾替换成零 public class NumUtils { /*** 数字金额大写转换* @param n 数字* @return 中文大写数字*/public ...
- 【Java】ChineseCurrencyUtils(货币金额大写转换工具类)
货币金额大写转换工具类 import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalForm ...
- python unicode编码转换中文_python unicode转中文及转换默认编码
一. 在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码.可 ...
最新文章
- python 画图 内存-python的内存分析和处理
- Redis设置值并设置过期时间
- linux pmap命令,Linux pmap 命令用法详解-Linux命令大全(手册)
- 【计算机组成原理】定点运算器的基本结构
- Java版二叉树遍历,查找,顺序化存储代码实现
- 马云:希望下辈子能做个好女人,男人离开女人“啥都不是”
- numeric.js
- 区块链网络安全平台Hapi Protocol将在Poolz上进行 IDO
- 高等数学(第七版)同济大学 习题5-2 个人解答
- 一文读懂Faster RCNN(大白话,超详细解析)
- lcx端口转发及远程终端问题
- 42道计算机网络面试高频题+答案,面试官喜欢的答案都在这里
- 用 Java 实现梯度下降,看这篇就对了!
- JavaScript实现逆波兰式
- Appium+python实现App自动化登录
- 星期几—YYYY-MM-DD,表示一个日期,你知道是星期几吗?
- 密码 加盐处理 是什么
- context 的用法是什么?(数据之间的跨组件交互传递)
- 陀螺仪加速度计MPU6050程序与校准方法
- CCNA实验二十四 路由更新的安全