将一个浮点数换成人民币读法字符串

 1 import java.util.Arrays;
 2 
 3 public class Num2Rmb
 4 {
 5     private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" ,
 6         "伍" , "陆" , "柒" , "捌" , "玖"};
 7     private String[] unitArr = {"分","角", "元" , "十" , "百" , "千", "万"};
 8 
 9     /**
10      * 把一个浮点数分解成整数部分和小数部分字符串
11      * @param num 需要被分解的浮点数
12      * @return 返回浮点数的字符串形式
13      */
14     private String divide(double num)
15     {
16         // 将一个浮点数强制类型转换为long,即得到它的整数部分
17         long zheng = (long)num;
18         // 浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数
19         long xiao = Math.round((num - zheng) * 100);
20         String Str=zheng + String.valueOf(xiao);
21         return Str;
22     }
23 
24     /**
25      * 把一个浮点数变成人民币中文形式
26      * @param numStr 需要转换的浮点数
27      * @return 转换成的人民币形式
28      */
29     private String toHanStr(Double DnumStr)
30     {   
31         String numStr=divide(DnumStr);
32         String result = "";
33         int numLen = numStr.length();
34         // 依次遍历数字字符串的每一位数字
35         for (int i = 0 ; i < numLen ; i++ )
36         {
37             // 把char型数字转换成的int型数字,因为它们的ASCII码值恰好相差48
38             // 因此把char型数字减去48得到int型数字,例如'4'被转换成4。
39             int num = numStr.charAt(i) - 48;
40             // 数字不是零,则需要添加单位(分、角、元、十、百、千、万)
41             if (  num != 0)
42             {
43                 result += hanArr[num] + unitArr[numLen - 1 - i];
44             }
45             // 否则看是否是”角“位或者是否是“元”位
46             else if(i+1<numLen&&i!=numLen-3)
47                 {
48                 //如果不是”角“位或者不是“元”位,看是否后面还有0,如果有0什么都不做
49                 //后面没有零就要在此时添上一个零字
50                 int num1 = numStr.charAt(i+1) - 48;
51                 if(num1!=0)
52                     {result += hanArr[num];}
53                 }
54                 else
55                
56                {  //是0且是“角”位,直接加上元字
57                    if(i==numLen-3)
58                     {result +=unitArr[2];}
59                    //是0且是“角”位,什么都不做
60                     
61                }
62 
63             
64         }
65         return result;
66     }
67 
68     public static void main(String[] args)
69     {
70         Num2Rmb nr = new Num2Rmb();
71     // 测试把一个浮点数变成人民币输出。
72         System.out.println(nr.toHanStr(60030.00));
73     }
74 }

 

posted on 2017-09-29 10:20  GuaNiu9978  阅读(586)  评论(0)    收藏  举报

导航