java 金额数字转换大写

 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();

猜你喜欢

转载自www.cnblogs.com/xcr1234/p/9140867.html
今日推荐