今天去了面试,在笔试过程中,发现有一题很有趣,当时一直都没有思路,现在终于想通了,随便跟大家分享一下,顺便自己也当作笔记,不过这题对于大神来说,其实很简单!我是小白,如下写的哪里不好,请大神指点迷津!
题目:请将数字转化为中文大写,例如352,转化后显示:叁百伍拾贰元.
代码实现如下:
import java.util.Scanner;
public class changeIntToCN {
/*
* 项目内容:当输入数字时候,转换为大写的中文数字
* 1.先定义数字以及交易符的中文标签
* 2.分开处理数字
* 3.整合输出
*
*/
private static final String[] NUMBER_CN= {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private static final String[] MONEY_CN= {"元","拾","百","仟","万","拾","百","仟","亿"};
private static final String[] POIINT_CN= {"分","角"};
String head="";
String end="";
int newNum;
String newNum1;
//定义构造方法,这样其实可以省了一些代码
public changeIntToCN(String num) {
//把num号码进行处理
//首先先要判断该号码是否有小数点,并把所穿进来的参数进行分割
if(num.contains(".")) {
int proint=num.indexOf(".");
head=num.substring(0, proint);
end=num.substring(proint+1);
//判断一下后面的小数,并判断是否大约5.如果大约5.进1
if(end.length()>2) {
newNum=Integer.parseInt(end); //把数字转成字符串
if(newNum%10>5) {
newNum+=10;
newNum1=String.valueOf(newNum).substring(0, 2); //在把数字转成字符串 并截成2位
end=newNum1;
}
else {
end=end.substring(0,2);
}
}
}else {
head=num;
}
System.out.println("转化为大写字母后=====>"+getCN());
}
//定义一个方法用来遍历匹配相关的数据
public String getCN() {
StringBuffer sbBuffer=new StringBuffer(); //定义一个字符串缓冲区
//首先处理头的数字
for(int i=0;i<head.length();i++) {
//把东西转进去缓冲区,而charAt的索引功效可以帮我们寻找在数组里面的下标,当然charAt也要稍作处理,把他变成整形 ,才能开启询标之旅哟 备注:charAt返回的是一个char类型
sbBuffer.append(NUMBER_CN[getInt(head.charAt(i))]);
sbBuffer.append(MONEY_CN[head.length()-1-i]);
}
//处理小数点后面的事情了
for(int i=0;i<end.length();i++) {
sbBuffer.append(NUMBER_CN[getInt(end.charAt(i))]);
sbBuffer.append(POINY_CN[end.length()-1-i]);
}
return sbBuffer.toString();
}
public int getInt(char c) {
String string=String.valueOf(c);
return Integer.parseInt(string);
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入数字");
String no=input.next();
changeIntToCN changeIntToCN=new changeIntToCN(no);
}
}
/*
* 项目内容:当输入数字时候,转换为大写的中文数字
* 1.先定义数字以及交易符的中文标签
* 2.分开处理数字
* 3.整合输出
*
*/
private static final String[] NUMBER_CN= {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private static final String[] MONEY_CN= {"元","拾","百","仟","万","拾","百","仟","亿"};
private static final String[] POIINT_CN= {"分","角"};
String head="";
String end="";
int newNum;
String newNum1;
//定义构造方法,这样其实可以省了一些代码
public changeIntToCN(String num) {
//把num号码进行处理
//首先先要判断该号码是否有小数点,并把所穿进来的参数进行分割
if(num.contains(".")) {
int proint=num.indexOf(".");
head=num.substring(0, proint);
end=num.substring(proint+1);
//判断一下后面的小数,并判断是否大约5.如果大约5.进1
if(end.length()>2) {
newNum=Integer.parseInt(end); //把数字转成字符串
if(newNum%10>5) {
newNum+=10;
newNum1=String.valueOf(newNum).substring(0, 2); //在把数字转成字符串 并截成2位
end=newNum1;
}
else {
end=end.substring(0,2);
}
}
}else {
head=num;
}
System.out.println("转化为大写字母后=====>"+getCN());
}
//定义一个方法用来遍历匹配相关的数据
public String getCN() {
StringBuffer sbBuffer=new StringBuffer(); //定义一个字符串缓冲区
//首先处理头的数字
for(int i=0;i<head.length();i++) {
//把东西转进去缓冲区,而charAt的索引功效可以帮我们寻找在数组里面的下标,当然charAt也要稍作处理,把他变成整形 ,才能开启询标之旅哟 备注:charAt返回的是一个char类型
sbBuffer.append(NUMBER_CN[getInt(head.charAt(i))]);
sbBuffer.append(MONEY_CN[head.length()-1-i]);
}
//处理小数点后面的事情了
for(int i=0;i<end.length();i++) {
sbBuffer.append(NUMBER_CN[getInt(end.charAt(i))]);
sbBuffer.append(POINY_CN[end.length()-1-i]);
}
return sbBuffer.toString();
}
public int getInt(char c) {
String string=String.valueOf(c);
return Integer.parseInt(string);
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入数字");
String no=input.next();
changeIntToCN changeIntToCN=new changeIntToCN(no);
}
}