生活中会遇到阿拉伯数字转化成对应的大写中文汉字的形式(设置一个上限5位数)
请用程序实现一个从键盘录入一串数字,要求将输入的阿拉伯数字转成对应的大写中文汉字。
如图所示:
分析:我使用的是double数据类型,将输入的数字分为两部分,整数部分和小数部分
1.需要键盘录入数字,使用System类
Scanner s = new Scanner(System.in);
System.out.println("输入金额:");
double a = s.nextDouble();
2.将数字转换为汉字需要定义数组来存储
一个数组用于存储大写汉字{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}
一个数组用于存储数字,提供遍历数字数组获取下标来查找中文汉字{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
一个数组用于存储单位,{"万", "千", "百", "十", "圆"}
String wei[] = {"万", "千", "百", "十", "圆"};
int shu[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
String han[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
int f=(int)a;//这里加入强转将录入的double类型转换为int类型,也就是将输入值的小数位数去掉
3.因为需要给你输入的每个数字带上单位,所以需要判断你输入的数为几位数,然后定义一个数组来存储你输入数字的每一位
//判断位数
int b = (int) a;
int count = 0;
while (b >= 1) {
b = b / 10;
count++;
}
int r[] = new int[count];
for (int i = 0; i < count; i++) {
int v = (int) c % 10;
c = c / 10;
r[i] = v;
}
4.对新数组的每个值进行遍历,通过遍历得到的值得到下标来获取中文汉字
整数部分
int cut = 5 - count;
for (int i = count - 1; i >= 0; i--) {//整数位数
if (r[i] != 0) {
for (int j = 0; j < shu.length; j++) {
if (r[i] == shu[j]) {
System.out.print(han[j] + wei[cut]);
}
}
cut++;
} else if (r[i] == 0) {
System.out.print(han[0] + wei[cut]);
cut++;
}
}
if
在这段代码中 int cut = 5 - count;这段代码最关键,这是输出你所录入几位数就输出几位数
小数部分
double l = a * 100;
//小数位数输出
int d = (int) l;
int m = 0, n = 0;
for (int i = 0; i < 1; i++) {
m = d % 10;
int j = d / 10;
n = j % 10;
}
for (int j = 0; j < shu.length; j++) {
if (n == shu[j]) {
System.out.print(han[j] + "毛");
}
}
for (int j = 0; j < shu.length; j++) {
if (m == shu[j]) {
System.out.print(han[j] + "分");
}
}
在这里我将输入的数乘以一百,然后对最后两个数取余就得到了两个数,这两个数就是输入数字的小数部分,然后对这两位数遍历找到对应的中文汉字输出
这里我还加了一个判断有无小数,没有小数就输出多少多少整
int f=(int)a;
if(a-f!=0){}
else{
System.out.println("整");
}
当等于零的时候小数部分不执行,输出整;不为0的时候输出小数部分
完整代码:
import java.util.Scanner;
//需求:从键盘录入一串数字,将输入的数字转换为对应的大写中文汉字,零、壹、贰、叁、肆、伍、陆、柒、捌、玖
//1.需要键盘录入一串数字
//2.因为是金额,所以有万,千,百,十,还有几毛几分,所有需要判断位数来断定
public class Test1 {
public static void main(String[] args) {
String wei[] = {"万", "千", "百", "十", "圆"};
int shu[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
String han[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
Scanner s = new Scanner(System.in);
System.out.println("输入金额:");
double a = s.nextDouble();
double c=a;
int f=(int)a;
double l = a * 100;
//判断位数
int b = (int) a;
int count = 0;
while (b >= 1) {
b = b / 10;
count++;
}
int r[] = new int[count];
for (int i = 0; i < count; i++) {
int v = (int) c % 10;
c = c / 10;
r[i] = v;
}
int cut = 5 - count;
for (int i = count - 1; i >= 0; i--) {//整数位数
if (r[i] != 0) {
for (int j = 0; j < shu.length; j++) {
if (r[i] == shu[j]) {
System.out.print(han[j] + wei[cut]);
}
}
cut++;
}
else if (r[i] == 0) {
System.out.print(han[0] + wei[cut]);
cut++;
}
}
if(a-f!=0){
//小数位数输出
int d = (int) l;
int m = 0, n = 0;
for (int i = 0; i < 1; i++) {
m = d % 10;
int j = d / 10;
n = j % 10;
}
for (int j = 0; j < shu.length; j++) {
if (n == shu[j]) {
System.out.print(han[j] + "毛");
}
}
for (int j = 0; j < shu.length; j++) {
if (m == shu[j]) {
System.out.print(han[j] + "分");
}
}
}
else{
System.out.println("整");
}
}
}
测试输出结果: