金额转换成RMB大写
来源:互联网 发布:淘宝订单可以不清洗吗 编辑:程序博客网 时间:2024/05/14 09:12
public class TestToChinessCurrency {public static void main(String[] args) {TestToChinessCurrency tcc = new TestToChinessCurrency();System.out.println(tcc.transfNumToCString("108010001800.01"));}/** * 将数字转换成大写金额 * @param number * 待转换的数字 * @return * 大写金额 */private String transfNumToCString(String number) {// 校验是否数字try {Double.parseDouble(number);} catch (NumberFormatException e) {return null;}// 转换操作try {String result = ""; // 返回值// 是否含有小数部分,默认falseboolean bHasDot = false;int dotIdx = number.indexOf(".");if (dotIdx == -1) {// 没有小数点,将小数点的位置设置成末尾dotIdx = number.length();} else {bHasDot = true;}// 获取整数部分、小数部分String beforeDot = number.substring(0, dotIdx).trim();String afterDot = number.substring(dotIdx);/* 处理整数部分 *//** * 圆、拾圆、佰圆、仟圆、万、拾万、佰万、仟万、亿、拾亿、佰亿、仟亿 * 分为3大级:"圆", "万", "亿",每大级下又有4小级 */String[] unit = { "圆", "万", "亿"};String[] subunit = { "拾", "佰", "仟" };// 定义所需变量int count = 0; // 循环处理计数器int subunitCnt = 0; // 小级计数器int unitCnt = 0; // 大级计数器char oldC = '3'; // 上一处理字符,默认3char cc = '0'; // 当前处理字符,默认0String zero = "零"; // 0转换字符int len = beforeDot.length(); // 整数部分长度boolean hasN = false; // 一次小级循环处理下来是否有非0数字boolean oldHasN = false; // 上一次小级循环处理下来是否有非0数字boolean allZero = true; // 是否全零// 开始让,加上大级最低单位,result="圆"result = unit[0] + result; // 循环处理每位数for (count = 0; count < len; ++count) {// 如果小级计数器到0且循环计数器非0,即万级、亿级开始if ((subunitCnt == 0) && (count != 0)) {// 上一大级循环没有非0数字if (!hasN) { // 如果亿级,这时万级都是0,截去result中“万”if (unitCnt % 2 == 0) {result = result.substring(1);}} else if (oldC == '0') {// 上一大级循环存在非0数字,且上一处理位0,即小级循环中仟为为零result = zero + result;}// 加上本次大级单位result = unit[unitCnt] + result;// 先将hasN值赋予oldHasN,然后重置hasN为falseoldHasN = hasN;hasN = false;}// 从个位开始处理cc = beforeDot.charAt(len - count - 1);// 上一处理字符、当前处理字符是否都为0,且本次大级循环已出现非0数字if (oldC == '0' && cc != oldC && hasN) {result = zero + result;}// 当前处理字符不为0if (cc != '0') {// 小级到“拾”及以后,加上小级单位if (subunitCnt != 0) {result = subunit[subunitCnt - 1] + result;}// 当前数字转换成大写String ccStr = this.convertNum(cc);// 连接上result = ccStr + result;// hasN应置为truehasN = true;// allZero应置为falseallZero = false;}// 当前处理字符cc赋予oldColdC = cc;// 小级计数器++++subunitCnt;// 如果小级计数器到4,则大级计数器++且小级计数器置零if (subunitCnt == 4) {++unitCnt;subunitCnt = 0;}}// 对上述处理结果再处理if (allZero) {// 全0,对result赋值result = "零圆";} else {// 截去result第一个字符可能出现的零int zeroCnt = 0;// 亿、万级全是0(不需要考虑第一级)if (!hasN) {++zeroCnt;if (!oldHasN) {++zeroCnt;}}if (zeroCnt != 0) {result = result.substring(zeroCnt);}// 如果result第一个字符还是零,截去,38646对应“零”if (result.charAt(0) == (char)38646) {result = result.substring(1);}}// 处理小数部分if (bHasDot) {// 干掉小数点afterDot = afterDot.substring(1).trim();// 小数部分单位 String[] cornunit = { "角", "分" };// 小数部分长度,最多两位len = afterDot.length();// 用于存小数数值char[] corn = new char[2];// 角corn[0] = afterDot.charAt(0);// 分,不存在赋值0if (len > 1) {corn[1] = afterDot.charAt(1);} else {corn[1] = '0';}// 如果角、分都为0,为整圆if (corn[0] == '0' && corn[1] == '0') {return result += "整";}// 处理小数部分之前,如果整数部分全0, 先置result为空串if (allZero) {result = "";}for (int i = 0; i < 2; ++i) {// 处理角、分char curchar = corn[i];String curStr = this.convertNum(curchar);result = result + curStr;// 角if (i == 0) {if (curchar != '0') {// 存在角值,加上单位result = result + cornunit[0];} else if (allZero) {// 没角值,且整数部分全0,置result为空串result = "";}}// 分,肯定存在值,否则到不了这if (i == 1) {result = result + cornunit[1];}}} else {result = result + "整";}return result;} catch (Exception e) {e.printStackTrace();}return null;}/** * 将1、2、3...转换成壹、贰、叁 * @param num * 数字 * @return * 大写中文数字 */private String convertNum(char num) {String numStr = "";switch (num) {case '1':numStr = "壹";break;case '2':numStr = "贰";break;case '3':numStr = "叁";break;case '4':numStr = "肆";break;case '5':numStr = "伍";break;case '6':numStr = "陆";break;case '7':numStr = "柒";break;case '8':numStr = "捌";break;case '9':numStr = "玖";case '0':numStr = "零";}return numStr;}}
0 0
- 金额转换成RMB大写
- 转换数字为大写RMB金额
- RMB小写转换成大写
- 金额转换成大写
- 金额转换成大写
- 金额转换成大写
- ASP小写金额转换成大写金额
- 小写金额转换成大写金额
- 数字金额转换成大写金额
- 小写金额转换成中文大写金额
- 小写金额转换成大写金额
- 小写金额转换成中文大写金额
- 金额小数转换成中文大写金额
- 将数字金额转换成大写金额
- 大写金额转换成阿拉伯数字金额
- [python]数字金额转换成大写金额
- 数字转换成大写金额
- 金额转换成中文大写
- php 基本算法
- 不用windows不会死
- 关于SQLite和SQLCE的比较
- 父亲节:再见,总有一天
- coco2d-x 在vs(2013)下,CCLog输出,显示控制台
- 金额转换成RMB大写
- tab面板是否存在
- JAVA轻量级文件监控
- Eclipse 集成Hibernate Tool工具
- 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题
- 算法:从序列里找到最长的以1降序的子序列
- PAT Advanced Level 1068
- MFC截图程序的实现(十一)
- PHP 程序员学数据结构与算法之《栈》