1 public static String moneyToChinese(BigDecimal i_money) { 2 if(i_money.equals(BigDecimal.ZERO)){ 3 return "零圆整"; 4 } 5 if (i_money.doubleValue() >= 100000000 || i_money.doubleValue() < 0.01) { 6 return ""; 7 } 8 i_money = i_money.setScale(2, RoundingMode.HALF_UP); 9 String numStr = i_money.toString(); 10 int pointPos = numStr.indexOf('.'); 11 String s_int = null; //整数部分 12 String s_point = null; //小数部分 13 if (pointPos >= 0) { 14 s_int = numStr.substring(0, pointPos); 15 s_point = numStr.substring(pointPos + 1); 16 } else { 17 s_int = numStr; 18 } 19 StringBuilder sb = new StringBuilder(); 20 if(!"0".equals(s_int)){ 21 int groupCount = (int) Math.ceil(s_int.length() / 4.0); 22 for (int group = 0; group < groupCount; group++) { 23 boolean zeroFlag = true; 24 boolean noZeroFlag = false; 25 int start = (s_int.length() % 4 == 0 ? 0 : (s_int.length() % 4 - 4)) + 4 * group; 26 for (int i = 0; i < 4; i++) { 27 if (i + start >= 0) { 28 int value = s_int.charAt(i + start) - '0'; 29 if (value > 0) { 30 sb.append(CN_UPPER_NUMBER[value]); 31 if (i < 3) { 32 sb.append(CN_UPPER_UNIT[i]); 33 } 34 zeroFlag = true; 35 noZeroFlag = true; 36 } else if (zeroFlag) { 37 sb.append('零'); 38 zeroFlag = false; 39 } 40 } 41 } 42 if(sb.charAt(sb.length() - 1) == '零'){ 43 sb.deleteCharAt(sb.length() - 1); 44 } 45 if(noZeroFlag || groupCount - group == 1){ 46 sb.append(CN_GROUP[groupCount - group - 1]); 47 } 48 } 49 } 50 if (s_point == null || "00".equals(s_point)) { 51 sb.append('整'); 52 }else{ 53 int j = s_point.charAt(0) - '0'; 54 int f = s_point.charAt(1) - '0'; 55 if(j > 0){ 56 sb.append(CN_UPPER_NUMBER[j]).append('角'); 57 if(f != 0){ 58 sb.append(CN_UPPER_NUMBER[f]).append('分'); 59 } 60 }else if("0".equals(s_int)){ 61 sb.append(CN_UPPER_NUMBER[f]).append('分'); 62 }else { 63 sb.append('零').append(CN_UPPER_NUMBER[f]).append('分'); 64 } 65 } 66 return sb.toString(); 67 } 68 69 70 private static final char[] CN_UPPER_NUMBER = "零壹贰叁肆伍陆柒捌玖".toCharArray(); 71 private static final char[] CN_UPPER_UNIT = "仟佰拾".toCharArray(); 72 private static final char[] CN_GROUP = "圆万亿".toCharArray();
java 金额数字转换大写
猜你喜欢
转载自www.cnblogs.com/xcr1234/p/9140867.html
今日推荐
周排行