算法--java字符串之金额转换

如例

输入  2135 ,==》输出 零佰零拾零万贰仟壹佰叁拾伍元

输入 789 ,==》输出 零佰零拾零万零仟柒佰捌拾玖元

分析

1、当输入2135时,我们可以先将其数字全部转换为大写 ->贰壹叁伍

2、在 贰壹叁伍 前面补零 ->零零零贰壹叁伍

3、将单位  佰拾万仟佰拾元 和 2  中对应已经转换为大写的对应位置进行拼接,比如 '佰'插入到 '零' 后面,以此类推, 后面的 '贰壹叁伍' 后面分别插入 '仟佰拾元'

代码演示

1、进行输入操作,并进行判断是否超过七位数或者输入的数为负数,或输入不合法的数。

while(true){
    Scanner sc = new Scanner(System.out);
    System.out.println("输入数字:");
    number = sc.nextInt();
    if(number >= 0 && number <= 999999){
        break;
    }else{
        System.out.println("输入无效!");
     }
}

 2、定义一个方法 getCapitalNumber 用来将数字转换为对应的大写。

public static String getCapitalNumber(int number){
    String[] str = {"零", "壹", "贰", "叁", "肆", "伍", "陆","柒","捌","玖"};
    return str[number];
}

3、数字转换为大写的过程

numberStr = "";
while(true){
    ge = number % 10;//取到输入金额的最后一位数字
    String capitalNumber = getCapitalNumber(ge);//将金额的最后一位数字传入getCapitalNumber()方法中,转换为对应的大写
    numberStr = capitalNumber + numberStr;//转换为大写后的数字进行拼接
    number = number / 10;
    //结束条件 --数字遍历完
    if(number == 0){
        break;
    }
    
}

4、在转换为大写后,不足七位的要在前面补零,零的个数为 7- (输入金额的位数)。

int count = 7 - numberStr.length();

for(int i = 0; i < count; i++){
    numberStr = "零" + numberStr;
}

5、将单位与对应的大写数字拼接

String result = "";
String[] arr = {"佰","拾","万","仟","佰","拾","元"};
for(int i = 0; i < numberStr; i++){
    char c = numberStr.charAt(i);
    result = result + c + arr[i];
}

6、放入完整的代码。

package string;

import java.util.Scanner;

public class stringdemo5 {
    public static void main(String[] args) {
        int number;
        String numberStr = "";
        //判断输入的是否正确
        while (true){
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入:");
            number = sc.nextInt();
            if(number >=0 && number <= 9999999) {
                break;
            }else{
                System.out.println("金额无效!");
            }
        }

        //将输入的数字逐个转换为大写
        while(true){
            int ge = number % 10;
            String capitalNumber = getCapitalNumber(ge);
            numberStr = capitalNumber + numberStr;
            number = number / 10;
            if(number == 0){
                break;
            }
        }
//        System.out.println(numberStr);

        //前面补零
        int count = 7-numberStr.length();
        for(int i = 0;i < count; i++){
            numberStr = "零" + numberStr;
        }
//        System.out.println(numberStr);

        //插入单位
        String result = "";
        String[] arr ={"佰","拾","万","仟","佰","拾","元"};

        for (int i = 0; i < numberStr.length(); i++) {
            char c = numberStr.charAt(i);
            result = result + c + arr[i];
        }
        System.out.println(result);

    }
    //小写转换为大写
    public static String getCapitalNumber(int number){
        String[] str = {"零", "壹", "贰", "叁", "肆", "伍", "陆","柒","捌","玖"};
        return str[number];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值