java金额转换,将数字金额转换为7位大写

来看题:

要将输入的数字(大于零并小于七位)转成如图格式金额

示例输入:

12345

示例输出:

零佰零拾壹万贰千叁佰肆拾伍

题解:

0-9对应的数字可以利用数组下标轻松转换为汉字,因此我们可以先将12345转为壹贰叁肆伍,然后再在前面补零补足7位:

零零壹贰叁肆伍

最后插入单位即可。

首先定义两个数组,一个用来存储汉字单位,一个用来存储汉字进位单位:

java 复制代码
  private static final String []yuan = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
  private static final String []wei = {"佰","拾","万","千","佰","拾","元"};
   

然后做输入数字处理:

java 复制代码
int money = 0;
        while(true) {
            System.out.println("请输入金额:");
            money = sc.nextInt();
            if (money > 0 && money < 10000000) {
                break;
            } else {
                System.out.println("输入错误");
            }

接下来我们可以先将数字转为汉字表示,这里因为频繁使用字符串拼接,因此创建StringBuilder:

java 复制代码
StringBuilder result = new StringBuilder();
        while(money > 0) {
            int temp = money % 10;
            result.insert(0, change(temp));
            money /= 10;
        }

change代码如下:

java 复制代码
    public static String change(int num) {
        return yuan[num];
    }

然后补足7位,可以先计算长度看看需要补几个零,然后用StringBuilder提供的insert方法可以轻松在头部插入:

java 复制代码
        int count = 7 - result.length();
        for (int i = 0; i < count; i++) {
            result.insert(0, "零");
        }
        System.out.println(result);

最后我们插入单位,定义两个下标i和j,j表示插入位置,i表示要插入的单位的数组下标。注意j隔一位插入即可:

java 复制代码
        // 插入单位
        int j = 1;
        int f = 0;
        while(j < result.length() && f < wei.length){
            result.insert(j, wei[f]);
            j += 2; // 这里注意j要隔一位进行插入
            f++;
        }
        System.out.println(result);

完整代码:

java 复制代码
package mylearn;
import java.util.*;

public class Test {
    private static final Scanner sc = new Scanner(System.in);
    private static final String []yuan = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    private static final String []wei = {"佰","拾","万","千","佰","拾","元"};
    public static void main(String[] args) {
        // 指针
        int money = 0;
        while(true) {
            System.out.println("请输入金额:");
            money = sc.nextInt();
            if (money > 0 && money < 100000000) {
                break;
            } else {
                System.out.println("输入错误");
            }
        }
        StringBuilder result = new StringBuilder();
        while(money > 0) {
            int temp = money % 10;
            result.insert(0, change(temp));
            money /= 10;
        }

        int count = 7 - result.length();
        for (int i = 0; i < count; i++) {
            result.insert(0, "零");
        }
        System.out.println(result);
        // 插入单位
        int j = 1;
        int f = 0;
        while(j < result.length() && f < wei.length){
            result.insert(j, wei[f]);
            j += 2;
            f++;
        }
        System.out.println(result);

    }

    public static String change(int num) {
        return yuan[num];
    }


}

end

相关推荐
m0_734172425 分钟前
Python列表切片为什么不改变原列表
java
kiss strong8 分钟前
idea显示前进后退按钮
java·ide·intellij-idea
“AI国潮设计-小江”25 分钟前
【SDXL实战】用AI生成“财神爷蛋糕×英歌舞人物”潮汕国潮甜品IP,附Prompt与批量生成思路
开发语言·人工智能·python·aigc
繁华的地方不一定留下你的脚印26 分钟前
C++线程如何安全停止与唤醒:std::jthread、stop_token与condition_variable
开发语言·c++
caoerzhong35 分钟前
跨境海外仓怎么管:JeeWMS 开源 Java 仓库管理系统打通头程、海外仓与尾程
java·开发语言·开源
码云数智-大飞40 分钟前
新手写 Python 代码,如何规范命名、减少 Bug
开发语言·python·php
MayBaymax41 分钟前
Elasticsearch 原理与用法
java·elasticsearch
马剑威(威哥爱编程)42 分钟前
【AI全栈后端12-02】Spring Boot 跑通第一个 AI 对话接口:HR 政策问答机器人实战
java·人工智能·spring boot·机器人
IT枫斗者枫哥1 小时前
AI返回合法JSON,字段就可信吗?给抽取结果补一道业务校验
java·人工智能·后端
用户3126874877201 小时前
Java IO/NIO/AIO 演进:从 BIO 到 Netty 的底层逻辑
java