人民币(RMB)小写/数字转换大写工具类,精确到分,修复‘圆零零’为‘圆整’,修复科学计数法处理异常。
生活随笔
收集整理的這篇文章主要介紹了
人民币(RMB)小写/数字转换大写工具类,精确到分,修复‘圆零零’为‘圆整’,修复科学计数法处理异常。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*** 轉換為中國人民幣大寫字符串,精確到分* @param money 傳入小寫數字字符串* @return String* @throws Exception*/public static String toRMBUpper(String money) throws Exception {boolean lessZero = false;//When money is scientific notationif (money.contains("E")){BigDecimal bg = new BigDecimal(Double.valueOf(money));money = bg.toPlainString();}if(money.startsWith("-")) {money = money.substring(1);lessZero = true;}if (!money.matches("^[0-9]*$|^0+\\.[0-9]+$|^[1-9]+[0-9]*$|^[1-9]+[0-9]*.[0-9]+$")) {throw new Exception("錢數格式錯誤!");}String[] part = money.split("\\.");String integerData = part[0];String decimalData = part.length > 1 ? part[1] : "";//Replace front 0if(integerData.matches("^0+$")){integerData = "0";}else if(integerData.matches("^0+(\\d+)$")){integerData = integerData.replaceAll("^0+(\\d+)$", "$1");}StringBuffer integer = new StringBuffer();for (int i = 0; i < integerData.length(); i++) {char perchar = integerData.charAt(i);integer.append(upperNumber(perchar));integer.append(upperNumber(integerData.length() - i - 1));}StringBuffer decimal = new StringBuffer();if (part.length > 1 && !"00".equals(decimalData)) {int length = decimalData.length() >= 2 ? 2 : decimalData.length();for (int i = 0; i < length; i++) {char perchar = decimalData.charAt(i);decimal.append(upperNumber(perchar));if (i == 0)decimal.append('角');if (i == 1)decimal.append('分');}}String result = integer.toString() + decimal.toString();result = dispose(result);if(lessZero && !"零圓整".equals(result)) {result = "負" + result;}return result;}private static char upperNumber(char number) {switch (number) {case '0':return '零';case '1':return '壹';case '2':return '貳';case '3':return '叁';case '4':return '肆';case '5':return '伍';case '6':return '陸';case '7':return '柒';case '8':return '捌';case '9':return '玖';}return '0';}private static char upperNumber(int index) {int realIndex = index % 9;if(index > 8) {realIndex = (index - 9) % 8;realIndex = realIndex + 1;}switch (realIndex) {case 0:return '圓';case 1:return '拾';case 2:return '佰';case 3:return '仟';case 4:return '萬';case 5:return '拾';case 6:return '佰';case 7:return '仟';case 8:return '億';}return '0';}private static String dispose(String result) {result = result.replaceAll("0", "");result = result.replaceAll("零仟零佰零拾|零仟零佰|零佰零拾|零仟|零佰|零拾", "零");result = result.replaceAll("零+", "零").replace("零億", "億");result = result.matches("^.*億零萬[^零]仟.*$") ? result.replace("零萬", "零") : result.replace("零萬", "萬");result = result.replace("億萬", "億");//Processing decimalsresult = result.replace("零角", "零").replace("零分", "");result = result.replaceAll("(^[零圓]*)(.+$)", "$2");result = result.replaceAll("(^.*)([零]+圓)(.+$)", "$1圓零$3");//Processing integerresult = result.replaceAll("圓零角零分|圓零角$|圓$|^零$|圓零$|圓零零$|零圓$", "圓整");result = result.replaceAll("^圓整$", "零圓整");return result;}public static void main(String[] args) throws Exception {//TestSystem.out.println(toRMBUpper("9999999999.0"));//Out: 玖拾玖億玖仟玖佰玖拾玖萬玖仟玖佰玖拾玖圓整}
?
總結
以上是生活随笔為你收集整理的人民币(RMB)小写/数字转换大写工具类,精确到分,修复‘圆零零’为‘圆整’,修复科学计数法处理异常。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于matlab各滤波器源代码,基于ma
- 下一篇: ps批量修改名片文字_怎么修改图片上的文