Java数组实战训练

前言

我是参考csdn的一位大佬的代码编写的,传送门:java人民币读法转换,以下为详细代码:

  1. Java数字转人民币读法,代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    import java.util.Scanner;

    public class ArrayTest2 {
    private String[] str1= {"零","壹","贰","叁","肆","伍",
    "陆","柒","捌","玖"};
    private String[] str2= {"十","百","千"};
    private String[] str3= {"角","分"};
    private String[] str4= {"元","万","亿"};
    private String divadeZheng(double num) {
    //把浮点数分解成整数部分字符串
    long zheng=(long)num;
    return String.valueOf(zheng);//整型转换成字符串
    }
    private String divadeXiao(double num) {
    //把浮点数分解成小数部分字符串
    long zheng=(long)num;
    long xiao=Math.round((num-zheng)*100);
    //得到浮点数的小数部分
    return String.valueOf(xiao);//返回字符串
    }
    private String toStr1(String xiao) {
    //把小数部分的数字字符串转换成汉字字符串
    String re1="";
    int len=xiao.length();
    if(len==2) {
    for(int i=0;i<2;i++) {
    int num=xiao.charAt(i)-48;//把字符串转换成数字
    if(num!=0) {
    re1+=str1[num]+str3[i];
    //数字不为零则需要加单位,为零则不操作
    }
    }
    }
    if(len==1 && xiao.charAt(0)!='0') {
    //若长度为1,例:12.09小数部分为9
    int num=xiao.charAt(0)-48;
    re1+=str1[num]+str3[1];
    //此时只有分,加单位str3[1]
    }
    return re1;
    }
    private String toStr(String zheng) {
    //把一个四位的数字字符串变成汉字字符串
    String re="";
    int j=0;
    int lenz=zheng.length();
    if(zheng.charAt(0)=='0' && lenz==1) {
    //特殊情况如输入0.89时,整数字符串为0的处理
    re+="零";
    return re;
    }
    for(int i=0;i<lenz;i++) {//遍历每一位数字
    int num=zheng.charAt(i)-48;
    if(i!=lenz-1 && num!=0) {
    //若不是最后一位数字且数字不为零,则需要添加单位
    re+=str1[num]+str2[lenz-2-i];
    } else if(!(num==0 && re.charAt(j-1)=='零')
    ) {
    //对于连续0出现的特殊处理,如009,第二个零不进行操作
    re+=str1[num];
    }
    j=re.length();
    }
    if(re.charAt(j-1)=='零') {
    //对特殊情况最后一位是零的处理,如1990,删除掉末尾的零
    re=re.substring(0, j-1);
    }
    return re;
    }
    private String zhengDivade(String zheng) {
    //对于金额的整数部分在12位数以内的处理,以4位数为一组
    //如1234(亿),5678(万),1234(元).89
    int len=zheng.length();
    String Re="";
    int n=0;
    if(len>=9)
    //判断整数部分的长度,考虑需要分几个组
    n=3;
    else if(len>=5 && n<9)
    n=2;
    else if(len>=1 && n<5)
    n=1;
    if(len%4 != 0) {
    //若位数非4的倍数,则在前面补0,直到位数为4的倍数为止
    //如12,2345补为0012,2345
    String zh="";
    int s=len%4;
    for(int k=0;k<(4-s);k++) {
    //在前面补0
    zh+="0";
    }
    zh+=zheng;
    zheng=zh;
    }
    for(int i=0;i<n;i++) {
    //进行n个组合的串联
    //进行n次循环
    String Zheng="";
    String sss="";
    len=zheng.length();//长度在变化
    //提取出整数部分后四位,进行分开的转换
    Zheng=zheng.substring(len-4);
    //除去已经提取的字符串以外的字符串,字符串更新
    zheng=zheng.substring(0, len-4);
    int m=0,me=0;
    for(int j=3;j>=0;j--) {
    //把字符串转换成整形数,如0012换成12
    m=(int)((Zheng.charAt(j)-48)*Math.pow
    (10, 3-j));
    me+=m;
    }
    Zheng=String.valueOf(me);//把数字转换成字符串
    sss=this.toStr(Zheng);//把字符串转换成中文汉字
    sss+=str4[i]+Re;
    //衔接上元等单位,再加上已经转换好的汉字字符串,注意每组
    //字符串间的顺序
    Re=sss;
    }
    return Re;
    }
    public static void main(String[] args) {
    //输入金额,并将整数部分和小数部分连接
    //TODO Auto-generated method stub
    ArrayTest2 s=new ArrayTest2();
    System.out.println("请输入整数部分为十二位以内的金额:");
    @SuppressWarnings("resource")
    Scanner input=new Scanner(System.in);
    double a=input.nextDouble();
    System.out.println("人民币读法为:");
    System.out.println(s.zhengDivade(s.divadeZheng(a))
    +s.toStr1(s.divadeXiao(a)));
    //将整数部分的汉字字符串和小数部分的汉字字符串连接
    }

    }