在码神的第三次课,我们学的仍是java的基础知识,但对其中的一些内容进行深入的学习,我感觉还是收获不少的。
一、我们解答了上一节课留下的思考题,即byte取值范围[-128,127]的-128是的得出过程和表示方法,提到了同余和模的解法;
二、学习了浮点数据类型:
1、float和double。
如float value = 3.14F;
float的字面量的计算结果是double,因此需要用"F"注明。
在练习中,复习了System.currentTimeMillis()得出当前毫秒数的方法,以及如何利用这个方法得出执行完一段代码的耗时;
2、学习了浮点数的科学计数法
如:eg.1.2 * 10 ^ 6中,1.2表示尾数,10表示基数,6表示指数,在eclipse中,输出double a = 100000000,显示的是1.0E8,在这里1.0表示尾数,尾数是10,指数是8,
3、int类型和float类型的比较:
(1)int类型的精度为31位。它的首位是符号位,其他31位是尾数,用来储存数据;
(2)float类型共32位,符号位占1位,指数为占8位,尾数位占23位;
(3)所以int的精度比float高。但是float表示的范围比int大。
4、long类型和double类型的比较:
(1)long类型的精度为63位。它的首位是符号位,其他63位是尾数;
(2)double类型共64位,1位符号位,11位指数位,52位尾数位;
(3)所以long的精度比double高,因为它的尾数位比double多。但是double表示的范围比long大。
5、知道浮点数运算有误差且较慢(因为计算机还要去拆分用了科学计数法的浮点数)。
三、学习了字符类型(占2字节)
1、java底层使用Unicode来表示字符(Unicode共8w个字符)(Unicode包含ascii,Unicode是ascii的超集),占2字节(16位),表示一个字符;
2、知道数字、小写字母、大写字母的Ascii码对应的int值,如a-97、 A-65、0-48
3、char如何 表示8、16、10进制:
(1)8进制:char a =07;
(2)10进制:char b =10;
(3)16进制:char c = 0xa2;
4、转义字符:eg. \t ,制表符( 一般跳8-10个字符,所以不同的电脑可能跳的距离不同);
5、表示中文:eg.\4e26 --->“中”。
四、学习了boolean类型
五、附上数字转人民币大写的实现代码
//第一个版本,现在回头看,才知道有很多可优化之处
//将一个最高可以12位(包括两位小数)的double类型的数转为人民币大写的代码:
package homework;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
*
* @author cmz
* @version v2.2
* @dateTime 2016/05/21
*/
public class RMBChange extends JFrame{
/**
* 输入一个double类型的数,格式为xxx.xx,把它转为人民币大写的形式
* @remark eg. double d = 10000000;计算机会记为1.0E7
* 所以针对千万级以上的数据,会对x.xxE7这种格式进行分解,从而得出小数位、
* 低四位(个十百千)、中四位(万、十万、百万、千万)、高四位(亿、十亿、百亿、千亿)
*/
String result = "";
JLabel jl_d;
JTextField jtf_d;
JButton jbt_submit,jbt_reset,jbt_cancel;
JTextArea jta_result;
public RMBChange(){
jl_d = new JLabel("请输入一个double类型最高12位的数,格式为xx.xx:");
jtf_d = new JTextField();
jbt_submit = new JButton("确定");
jbt_reset = new JButton("重置");
jbt_cancel = new JButton("取消");
jta_result = new JTextArea("");
//JTextArea位不可编辑
jta_result.setEditable(false);
//设置JTextArea内的字体、风格、字号
Font f = new Font("Courier",Font.BOLD,20);
jta_result.setFont(f);;
jl_d.setHorizontalAlignment(0);
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(1,2,5,5));
p1.add(jl_d);
p1.add(jtf_d);
JPanel p2 = new JPanel();
p2.setLayout(new GridLayout(1,3,5,5));
p2.add(jbt_submit);
p2.add(jbt_reset);
p2.add(jbt_cancel);
JPanel p3 = new JPanel();
p3.setLayout(new GridLayout(2,1,5,5));
p3.add(p1);
p3.add(p2);
add(p3,BorderLayout.NORTH);
add(jta_result,BorderLayout.CENTER);
//确定提交输入的数字
jbt_submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String d = jtf_d.getText();
Pattern pattern = Pattern.compile("^\\d{0,12}\\.{0,1}(\\d{0,1}){2}$");
Matcher matcher = pattern.matcher(d);
if(d.equals(new String(""))){
JOptionPane.showMessageDialog(null, "输入的数字为空!");
}
else {
if(matcher.matches()){
result = handle(d);
jta_result.setText(result);
}
else{
JOptionPane.showMessageDialog(null, "数字格式错误!");
}
}
}
});
//重置
jbt_reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jtf_d.setText("");
jta_result.setText("");
}
});
//取消退出
jbt_cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
RMBChange rmbChange = new RMBChange();
rmbChange.setVisible(true);
rmbChange.setTitle("RMB大写转换");
rmbChange.setSize(650, 450);
rmbChange.setLocationRelativeTo(null);
rmbChange.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static String handle(String string) {
double totalMoney = Double.parseDouble(string);
String result = "";
// totalMoney >= 1亿
if (totalMoney >= 100000000) {
System.out.println(totalMoney + " 大于1亿");
// eg.控制台一开始输出为:2.1E8 8:权 (以下都以2.1E8为例)
// 目的:(1)2.1E8表示21000 0000,要得到7个0(加上2位小数位,共9位);(2)得到权
String s = ""+totalMoney;
//用小数点分割字符串
String [] s1 = s.split("\\.");
//“E”定位
int i = s1[1].indexOf('E');
/*
* (1)接下来的步骤要得出:到底要补多少个0(包括2位小数位)
*/
//点到E之间的字符串
String s3 = s1[1].substring(0, i);
//将点到E之间的字符串分解
String str [] = s3.split("");//注意:str[0] = ""
//点到E之间的字符串除去空字符串的长度
//所以,需要补0的个数(包括2位小数位) = 权 - lenOfDianToE
int lenOfDianToE = str.length - 1;
//(2)得到权
String sOfE = s1[1].substring(i+1);
int p = Integer.parseInt(sOfE);
System.out.println("前s3 = " + s3);
//后补0
//注意:eg.1.0E8即没输入".00"或9.999E11,则向个位后面加".00"
//调试过程中发现:13亿和13.00输出都是1.3E9
/*
* 以下步骤:2.1E8需要补多少个0(包括2位小数位)
*/
//2.0Ex的情况(x>=8 && x<=11)
if(s3.equals(new String("0"))){
for (int j = 0; j < p - 1 + 2; j++) {
s3 += "0";
}
}
//除了1.0Ex的情况(x>=8 && x<=11)之外的情况
else {
for (int j = 0; j < p - lenOfDianToE + 2; j++) {
s3 += "0";
}
}
System.out.println("后s3 = " + s3);
//获取后面补0后长度(即现在,小数点到E之间的长度)
int right = s3.length();
/*
* 接下来:前面补0,因为虽然现在是讨论大于1亿的数的情况,但是,
* 比如1亿、10亿、100亿的前面分别仍缺少3个0、2个0、1个0
*/
if (right <= 12) {
System.out.println("right = " + right);
//s3:小数点到E之间的长度
String s4[] = s3.split("");//注意s4[0] = ""
String s5[] = new String[15];
//1亿的情况,前面补3个0
if (right == 10) {
for (int j = 0; j < 3; j++) {
s5[j] = "0";
}
s5[3] = s1[0];
for (int j = 4; j < s5.length; j++) {
s5[j] = s4[j-4];
}
//重新给s3赋值,此时s3前面有3个0
s3 = "";
for (int j = 0; j < s5.length; j++) {
s3 += s5[j];
}
System.out.println("1亿----补3个0:" + s3);
}
//10亿的情况,前面补2个0
else if (right == 11) {
for (int j = 0; j < 2; j++) {
s5[j] = "0";
}
s5[2] = s1[0];
for (int j = 3; j < s5.length; j++) {
s5[j] = s4[j-3];
}
s3 = "";
for (int j = 0; j < s5.length; j++) {
s3 += s5[j];
}
System.out.println("1亿----补2个0:" + s3);
}
//100亿的情况,前面补3个0
else if (right == 12) {
s5[0] = "0";
s5[1] = s1[0];
for (int j = 2; j < s5.length; j++) {
s5[j] = s4[j-2];
}
s3 = "";
for (int j = 0; j < s5.length; j++) {
s3 += s5[j];
}
System.out.println("1亿----补1个0:" + s3);
}
}
System.out.print("1亿----取到E(不包括E):" + s3);
/*
* 接下来的数的形式:xxxx xxxx xxxx
*/
// 1亿----取到E(不包括E)
int sRightExcludeEn = s3.length();
System.out.println(" 长度:" + sRightExcludeEn);
String [] sRightSplit = s3.split("");//sRightSplit[0] = ""
// 因为lengthOfSRightSplit[]=""
int lengthOfSRightSplit =sRightSplit.length - 1;
System.out.println("(1兆,1千亿]----用空字符串分离\"取到E(不包括E)\"的字符串的长度:" + lengthOfSRightSplit);
// 小数部分
String SOfdecimal = sRightSplit[lengthOfSRightSplit-1] + sRightSplit[lengthOfSRightSplit];
System.out.println("(1兆,1千亿]----小数部分:" + SOfdecimal);
int IntOfDecimal = Integer.parseInt(SOfdecimal);
//低4位(个十百千)
// 已知是大于1 0000 0000 的数
int qian = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 5]);
int bai = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 4]);
int shi = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 3]);
int ge = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 2]);
String SOfLowFourdecimal = "" +qian + bai + shi + ge;
System.out.println("(1兆,1千亿]----整数低四位 = "+ SOfLowFourdecimal);
//中四位:万到千万
int qianWan = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 9]);
int baiWan = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 8]);
int shiWan = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 7]);
int wan = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 6]);
System.out.println("(1兆,1千亿]----千万位:" + qianWan + "\n(1兆,1千亿]----百万位:"
+ baiWan +"\n(1兆,1千亿]----十万位:"
+ shiWan + "\n(1兆,1千亿]----万位:" + wan);
//高四位:亿到千亿
//大于等于10000 0000,小于1000 0000 0000
int qianYi,baiYi,shiYi,yi;
/*
* >=1千万亿的情况,即前面不用补零的情况
*
* 说明:right = s3.length();
* s3:获取"后面"补0(区别前面补0)后长度(即现在,小数点到E之间的长度)
*
* 形式:xxxx xxxx xxxx,科学计数法表示:eg.1.0E11,加上2个小数位,即13,即right == 13
*/
if (right == 13) {
//s1[0] = 小数点前面的一位数
String SOfHHighFourdecimal = s1[0] + sRightSplit[lengthOfSRightSplit - 13]
+ sRightSplit[lengthOfSRightSplit - 12]
+ sRightSplit[lengthOfSRightSplit - 11];
System.out.println("(1兆,1千亿]----整数的高高四位 = "+ SOfHHighFourdecimal);
/**
* sRightSplit = s3.split("");
* sRightSplit(包括小数,它的长度需减去1,即除去空字符串);可参考 1 (<--s1[0])000(<--这是第10位) 0000 0000.00
*/
qianYi = Integer.parseInt(s1[0]);
baiYi = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 12]);
shiYi = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 11]);
yi = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 10]);
System.out.println("(1兆,1千亿]----千亿位:" + qianYi + "\n(1兆,1千亿]----百亿位:"
+ baiYi +"\n(1兆,1千亿]----十亿位:"
+ shiYi + "\n(1兆,1千亿]----亿位:" + yi);
}
/*
* 小于1千亿,>=1亿的情况,即前面用补零的情况
*/
else {
System.out.println("小于1千亿,>=1亿的情况,即前面用补零的情况");
//eg.sRightSplit[lengthOfSRightSplit - 13]有可能为0,即补上去的0
String SOfHHighFourdecimal = sRightSplit[lengthOfSRightSplit - 13] + sRightSplit[lengthOfSRightSplit - 12] + sRightSplit[lengthOfSRightSplit - 11] + sRightSplit[lengthOfSRightSplit - 10];
System.out.println("(1千亿,1亿]----整数的高高四位 = "+ SOfHHighFourdecimal);
qianYi = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 13]);
baiYi = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 12]);
shiYi = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 11]);
yi = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 10]);
System.out.println("(1千亿,1亿]----千亿位:" + qianYi + "\n(1千亿,1亿]----百亿位:"
+ baiYi +"\n(1千亿,1亿]----十亿位:"
+ shiYi + "\n(1千亿,1亿]----亿位:" + yi);
}
result += highFour(qianYi,baiYi,shiYi,yi)
+ middleFour(qianWan,baiWan,shiWan,wan)
+ lowFour(qian, bai, shi, ge, IntOfDecimal);
}
else{
/*
* totalMoney 属于 (1亿,1千万]范围,在电脑的表现形式仍然为:x.xEx,仍需要参战上面"亿到千亿"的做法
*/
if (totalMoney >= 10000000) {
System.out.println(totalMoney + " 属于 (1亿,1千万]");
String [] s1 = (""+totalMoney).split("\\.");
/*
* 目的:(1)求出权;
* (2)算出需要后面补多少个0(包括2个小数位)
*/
//接下来:算出x.xEx中第2个x的长度(记为len),以此作为需要补多少个0(包括2个小数位)的依据,即:补0数 (包括2个小数位)= 权 - len
//s1[1]中定E的位
int i = s1[1].indexOf('E');
//取点到E之间的字符串
String s3 = s1[1].substring(0, i);
System.out.print("(1亿,1千万]----取到E(不包括E):" + s3);
//将点到E之间的字符串分解
String str [] = s3.split("");
//点到E之间的字符串除去空字符串的长度
int lenOfDianToE = str.length - 1;
/*
* (1)求出权
*/
//得到权
String sOfE = s1[1].substring(i+1);
int p = Integer.parseInt(sOfE);
System.out.println("前s3 = " + s3);
//后补0
//属于 (1亿,1千万]
//1.0Ex的情况(x==7)
//补0的个数需 + 包括2个小数位
if(s3.equals(new String("0"))){
for (int j = 0; j < p - 1 + 2; j++) {
s3 += "0";
}
}
//除了1.0Ex的情况(x==7)之外的情况
else {
//补0的个数需 + 包括2个小数位
for (int j = 0; j < p - lenOfDianToE + 2; j++) {
s3 += "0";
}
}
System.out.println("后s3 = " + s3);
//现在的s3(可以理解成小数点到E的长度)的长度
int right = s3.length();
System.out.println("right = " + right);
// 现在的s3(可以理解成小数点到E的长度)的长度。不包括En
int sRightExcludeEn = s3.length();
System.out.println(" 不包括En的长度:" + sRightExcludeEn);
String [] sRightSplit = s3.split("");
// 因为sRightSplit[0] = ""
int lengthOfSRightSplit =sRightSplit.length - 1;
System.out.println("(1亿,1千万]----用空字符串分离\"取到E(不包括E)\"的字符串的长度:" + lengthOfSRightSplit);
// 小数部分
String SOfdecimal = sRightSplit[lengthOfSRightSplit-1] + sRightSplit[lengthOfSRightSplit];
System.out.println("(1亿,1千万]----小数部分:" + SOfdecimal);
// 小数部分
int IntOfDecimal = Integer.parseInt(SOfdecimal);
// 整数部分
//低4位
// 已知是大于1000 0000,小于1亿的数
int qian = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 5]);
int bai = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 4]);
int shi = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 3]);
int ge = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 2]);
String SOfLowFourdecimal = "" +qian + bai + shi + ge;
System.out.println("(1亿,1千万]----整数低四位 = "+ SOfLowFourdecimal);
//(1亿,1千万]----万到千万 eg.1(<--s1[0])000(<--No.6) 0000.0(<--No.1)0
// sRightSplit:不包括En
int qianWan = Integer.parseInt(s1[0]);
int baiWan = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 8]);
int shiWan = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 7]);
int wan = Integer.parseInt(sRightSplit[lengthOfSRightSplit - 6]);
System.out.println("(1亿,1千万]----千万位:" + qianWan
+ "\n(1亿,1千万]----百万位:" + baiWan
+ "\n(1亿,1千万]----十万位:" + shiWan
+ "\n(1亿,1千万]----万位:" + wan);
result += middleFour(qianWan,baiWan,shiWan,wan)
+ lowFour(qian, bai, shi, ge, IntOfDecimal);
}
else {
/**
* 以下代码总觉得游戏冗余,但不知道哪里冗余
*/
//1千万以下的情况
// 格式化小数部分
String s = "" + totalMoney;
String [] s1 = s.split("\\.");
int money = Integer.parseInt(s1[0]);
int decimal;
/*
* 说明一点:因为小数的输入可能为这种形式:100.1
* 为确保有两位小数,即100.10
* 因为接下来我会把10分别提取出来,即1和0这两个int类型的数据作为参数传人decimal(int,int)方法内
*
* 注意,如果你输入100,电脑还是会把它作为100.0处理而不会报错
*/
if(s1[1].length() == 1){
decimal = Integer.parseInt(s1[1]);
decimal *= 10;
}
else {
decimal = Integer.parseInt(s1[1]);
}
System.out.println("小数点前:" + s1[0] + " 小数点后:" + decimal);
/*
* 1000 0000 > money >= 100 0000,即(1000万,100万]
*/
if (money >= 1000000) {
System.out.print(money);
System.out.println(" (1000万,100万]");
int integer = (int)(money / 1000000);
//千万位不可能为0,因为前面的if条件已经判断过了
result += "" +digitToChinese(integer) + "佰";
int rest = (int)(money % 1000000);
// 各个位的值
//十万位
integer = (int)(rest / 100000);
rest = (int)(rest % 100000);
int integerWan = (int)(rest / 10000);
int restWan = (int)(rest % 10000);
System.out.println("(1000万,100万]----integerWan = " + integerWan);
System.out.println("(1000万,100万]----restWan = " + restWan);
int integerQian = (int)(restWan / 1000);
int restQian = (int)(restWan % 1000);
System.out.println("(1000万,100万]----integerQian = " + integerQian);
System.out.println("(1000万,100万]----restQian = " + restQian);
int integerBai = (int)(restQian / 100);
int restBai = (int)(restQian % 100);
System.out.println("(1000万,100万]----integerBai = " + integerBai);
System.out.println("(1000万,100万]----restBai = " + restBai);
int integerShi = (int)(restBai / 10);
int restShi = (int)(restBai % 10);
System.out.println("(1000万,100万]----integerShi = " + integerShi);
System.out.println("(1000万,100万]----restShi = " + restShi);
int integerGe = restShi;
System.out.println("(1000万,100万]----integerGe = " + integerGe);
//即xxx万(eg.100万整)整这种情况
if (rest == 0) {
result += "萬圆";
//判断输出“整”这个字符串交由decimal(int,int)来处理
result += decimal(decimal);
}
/*
* eg.110wan 101wan 111wan,
* 分别为十万位非0,万位为0;十万位为0,万位为非0;十万位、万位都非0
*/
else if(rest != 0){
//eg.110wan
//integer:十万
if (integer != 0 && integerWan == 0) {
result += digitToChinese(integer) +
"拾萬";
result += lowFour(integerQian,integerBai,integerShi,integerGe,decimal);
}
//eg.101wan
else if (integer == 0 && integerWan != 0) {
result += "零" + digitToChinese(integerWan) +
"萬";
result += lowFour(integerQian,integerBai,integerShi,integerGe,decimal);
}
//eg.111wan
else if (integer != 0 && integerWan != 0) {
result += digitToChinese(integer) + "拾" + digitToChinese(integerWan) +
"萬";
result += lowFour(integerQian,integerBai,integerShi,integerGe,decimal);
}
}
}
else if(1000000 > money){
//(100万,10万]
if (money >= 100000) {
System.out.println("(100万,10万]----");
//十万位的值
int integer = (int)(money / 100000);
result += "" +digitToChinese(integer) + "拾";
//除了十万位,剩下的位的总数值
int rest = (int)(money % 100000);
// 各个位的值
//万位的值
int integerWan = (int)(rest / 10000);
//除了万位,剩下的位的总数值
int restWan = (int)(rest % 10000);
System.out.println("(100万,10万]----integerWan = " + integerWan);
System.out.println("(100万,10万]----restWan = " + restWan);
//千位的值
int integerQian = (int)(restWan / 1000);
//除了千位,剩下的位的总数值
int restQian = (int)(restWan % 1000);
System.out.println("(100万,10万]----integerQian = " + integerQian);
System.out.println("(100万,10万]----restQian = " + restQian);
//百位的值
int integerBai = (int)(restQian / 100);
//除了百位,剩下的位的总数值
int restBai = (int)(restQian % 100);
System.out.println("(100万,10万]----integerBai = " + integerBai);
System.out.println("(100万,10万]----restBai = " + restBai);
//十位的值
int integerShi = (int)(restBai / 10);
//除了十位,剩下的位的总数值
int restShi = (int)(restBai % 10);
System.out.println("(100万,10万]----integerShi = " + integerShi);
System.out.println("(100万,10万]----restShi = " + restShi);
//个位的值
int integerGe = restShi;
System.out.println("(100万,10万]----integerGe = " + integerGe);
//eg.10万
//rest:除了十万位,剩下的位的总数值
/*
* 即多少十万整的情况
*/
if (rest == 0) {
result += "萬圆";
result += decimal(decimal);
}
//eg.11万
else if(rest != 0){
//eg.11 0000
if (integerWan != 0) {
result += digitToChinese(integer) +
"萬";
result += lowFour(integerQian,integerBai,integerShi,integerGe,decimal);
}
}
}
else if(100000 > money){
//(10万,1万]
if (money >= 10000) {
System.out.println("(10万,1万]----");
//万位的值
int integer = (int)(money / 10000);
result += "" +digitToChinese(integer) + "萬";
//除了万位,剩下的位的总数值
int rest = (int)(money % 10000);
// 各个位的值
//千位的值
int integerQian = (int)(rest / 1000);
//除了千位,剩下的位的总数值
int restQian = (int)(rest % 1000);
System.out.println("(10万,1万]----integerQian = " + integerQian);
System.out.println("(10万,1万]----restQian = " + restQian);
//百位的值
int integerBai = (int)(restQian / 100);
//除了百位,剩下的位的总数值
int restBai = (int)(restQian % 100);
System.out.println("(10万,1万]----integerBai = " + integerBai);
System.out.println("(10万,1万]----restBai = " + restBai);
//十位的值
int integerShi = (int)(restBai / 10);
//除了十位,剩下的位的总数值
int restShi = (int)(restBai % 10);
System.out.println("(10万,1万]----integerShi = " + integerShi);
System.out.println("(10万,1万]----restShi = " + restShi);
//个位的值
int integerGe = restShi;
System.out.println("(10万,1万]----integerGe = " + integerGe);
//eg.1万
//rest:除了万位,剩下的位的总数值
/*
* 即多少万整的情况
*/
if (rest == 0) {
result += "圆";
result += decimal(decimal);
}
//eg.1万1千
else if(rest != 0){
//eg.1 1000
result += lowFour(integerQian,integerBai,integerShi,integerGe,decimal);
}
}
else if (10000 > money) {
//(1万,1000]
if (money >=1000) {
System.out.println("(1万,1000]----");
//千位的值
int integer = (int)(money / 1000);
result += "" +digitToChinese(integer) + "仟";
//除了千位,剩下的位的总数值
int rest = (int)(money % 1000);
// 各个位的值
//百位的值
int integerBai = (int)(rest / 100);
//除了百位,剩下的位的总数值
int restBai = (int)(rest % 100);
System.out.println("(1万,1000]----integerBai = " + integerBai);
System.out.println("(1万,1000]----restBai = " + restBai);
//十位的值
int integerShi = (int)(restBai / 10);
//除了十位,剩下的位的总数值
int restShi = (int)(restBai % 10);
System.out.println("(1万,1000]----integerShi = " + integerShi);
System.out.println("(1万,1000]----restShi = " + restShi);
//个位的值
int integerGe = restShi;
System.out.println("(1万,1000]----integerGe = " + integerGe);
//eg.1千
//rest:除了千位,剩下的位的总数值
/*
* 即多少千的情况
*/
if (rest == 0) {
result += "圆";
result += decimal(decimal);
}
//eg.1千1百
else if(rest != 0){
//eg.1100
/*
* 调用lowThree(int,int,int,int)来处理
*/
result += lowThree(integerBai,integerShi,integerGe,decimal);
}
}
else if (1000 > money) {
//(1000,100]
if (money >= 100) {
System.out.println("(1000,100]----");
//百位的值
int integer = (int)(money / 100);
result += "" +digitToChinese(integer) + "佰";
//除了百位,剩下的位的总数值
int rest = (int)(money % 100);
// 各个位的值
//十位的值
int integerShi = (int)(rest / 10);
//除了十位,剩下的位的总数值
int restShi = (int)(rest % 10);
System.out.println("(1000,100]----integerShi = " + integerShi);
System.out.println("(1000,100]----restShi = " + restShi);
//个位的值
int integerGe = restShi;
System.out.println("(1000,100]----integerGe = " + integerGe);
//eg.100
//rest:除了佰位,剩下的位的总数值
if (rest == 0) {
result += "圆";
result += decimal(decimal);
}
//eg.110
else if(rest != 0){
//eg.110
/*
* 调用lowTwo(int,int,int)来处理
*/
result += lowTwo(integerShi,integerGe,decimal);
}
}
else if (100 > money) {
//(100,10]
if (money >= 10) {
System.out.println("(100,10]----");
//十位的值
int integer = (int)(money / 10);
result += "" +digitToChinese(integer) + "拾";
//除了十位,剩下的位的总数值
int rest = (int)(money % 10);
// 各个位的值
//个位的值
int integerGe = rest;
System.out.println("(100,10]----integerGe = " + integerGe);
//eg.10
//rest:除了十位,剩下的位的总数值
if (rest == 0) {
result += "圆";
result += decimal(decimal);
}
//eg.11
else if(rest != 0){
//eg.11
result += digitToChinese(integerGe)
+ "圆" + decimal(decimal);
}
}
else if (10 > money) {
if (money >= 1) {
System.out.println("(10,1]----");
//个位的值
int integer = money;
result += "" +digitToChinese(integer)
+ "圆" + decimal(decimal);
}else if (money == 0) {
System.out.println("(10,1]----0圆");
result += "零圆" + decimal(decimal);
}
}
}
}
}
}
}
}
}
return result;
}
/**
* 处理千亿、百亿、十亿、亿位上面的数值
* @param qianYi
* @param baiYi
* @param shiYi
* @param yi
* @return
*/
public static String highFour(int qianYi, int baiYi, int shiYi, int yi) {
String result = "";
//16种(2*2*2*2),integer为0或非0两种选择,x代表为0,,y代表非0
if (qianYi == 0 && baiYi == 0
&& shiYi == 0 && yi != 0) {
result += digitToChinese(yi) + "亿";
}
//xxyx
else if (qianYi == 0 && baiYi == 0
&& shiYi != 0 && yi == 0) {
result += digitToChinese(shiYi) + "拾亿";
}
//xyxx
else if (qianYi == 0 && baiYi != 0
&& shiYi == 0 && yi == 0) {
result += digitToChinese(baiYi) + "佰亿";
}
//xyyx
else if (qianYi == 0 && baiYi != 0
&& shiYi != 0 && yi == 0) {
result += digitToChinese(baiYi) + "佰" +
digitToChinese(shiYi) + "拾亿";
}
//xyxy
else if (qianYi == 0 && baiYi != 0
&& shiYi == 0 && yi != 0) {
result += digitToChinese(baiYi) + "佰零" +
digitToChinese(yi) + "亿";
}
//xyyy
else if (qianYi == 0 && baiYi != 0
&& shiYi != 0 && yi != 0) {
result += digitToChinese(baiYi) + "佰" +
digitToChinese(shiYi) + "拾" +
digitToChinese(yi) +"亿";
}
//xxyy
else if (qianYi == 0 && baiYi == 0
&& shiYi != 0 && yi != 0) {
result += digitToChinese(shiYi) + "拾" +
digitToChinese(yi) +"亿";
}
//yyyy
else if (qianYi != 0 && baiYi != 0
&& shiYi != 0 && yi != 0) {
result += digitToChinese(qianYi) + "仟" +
digitToChinese(baiYi) + "佰" +
digitToChinese(shiYi) + "拾" +
digitToChinese(yi) +
"亿";
}
//yxxx
else if (qianYi != 0 && baiYi == 0
&& shiYi == 0 && yi == 0) {
result += digitToChinese(qianYi) + "仟" +"亿";
}
//yxxy
else if (qianYi != 0 && baiYi == 0
&& shiYi == 0 && yi != 0) {
result += digitToChinese(qianYi) + "仟零" +
digitToChinese(yi) +"亿";
}
//yxyx
else if (qianYi != 0 && baiYi == 0
&& shiYi != 0 && yi == 0) {
result += digitToChinese(qianYi) + "仟零" +
digitToChinese(shiYi) + "拾" +
"亿";
}
//yyxx
else if (qianYi != 0 && baiYi != 0
&& shiYi == 0 && yi == 0) {
result += digitToChinese(qianYi) + "仟" +
digitToChinese(baiYi) +
"佰亿";
}
//yxyy
else if (qianYi != 0 && baiYi == 0
&& shiYi != 0 && yi != 0) {
result += digitToChinese(qianYi) + "仟零" +
digitToChinese(shiYi) + "拾" +
digitToChinese(yi) +
"亿";
}
//yyxy
else if (qianYi != 0 && baiYi != 0
&& shiYi == 0 && yi != 0) {
result += digitToChinese(qianYi) + "仟" +
digitToChinese(baiYi) + "佰零" +
digitToChinese(yi) + "亿";
}
//yyyx
else if (qianYi != 0 && baiYi != 0
&& shiYi != 0 && yi == 0) {
result += digitToChinese(qianYi) + "仟" +
digitToChinese(baiYi) + "佰" +
digitToChinese(shiYi) +"拾亿";
}
return result ;
}
/**
* 处理千万、百万、十万、万位上面的数值
* @param qianWan
* @param baiWan
* @param shiWan
* @param wan
* @return
*/
public static String middleFour(int qianWan, int baiWan,
int shiWan, int wan) {
String result = "";
//16种(2*2*2*2),integer为0或非0两种选择,x代表为0,,y代表非0
//xxxx
if (qianWan == 0 && baiWan == 0
&& shiWan == 0 && wan == 0) {
result += "";
}
//xxxy
else if (qianWan == 0 && baiWan == 0
&& shiWan == 0 && wan != 0) {
result += "零" + digitToChinese(wan) + "萬";
}
//xxyx
else if (qianWan == 0 && baiWan == 0
&& shiWan != 0 && wan == 0) {
result += "零" + digitToChinese(shiWan) + "萬";
}
//xyxx
else if (qianWan == 0 && baiWan != 0
&& shiWan == 0 && wan == 0) {
result += "零" + digitToChinese(baiWan) + "萬";
}
//xyyx
else if (qianWan == 0 && baiWan != 0
&& shiWan != 0 && wan == 0) {
result += "零" + digitToChinese(baiWan) + "佰" +
digitToChinese(shiWan) + "拾萬";
}
//xyxy
else if (qianWan == 0 && baiWan != 0
&& shiWan == 0 && wan != 0) {
result += " 零" + digitToChinese(baiWan) + "佰零" +
digitToChinese(wan) + "萬";
}
//xyyy
else if (qianWan == 0 && baiWan != 0
&& shiWan != 0 && wan != 0) {
result += "零" + digitToChinese(baiWan) + "佰" +
digitToChinese(shiWan) + "拾" +
digitToChinese(wan) +"萬";
}
//xxyy
else if (qianWan == 0 && baiWan == 0
&& shiWan != 0 && wan != 0) {
result += "零" + digitToChinese(baiWan) + "拾" +
digitToChinese(shiWan) +"萬";
}
//yyyy
else if (qianWan != 0 && baiWan != 0
&& shiWan != 0 && wan != 0) {
result += digitToChinese(qianWan) + "仟" +
digitToChinese(baiWan) + "佰" +
digitToChinese(shiWan) + "拾" +
digitToChinese(wan) +
"萬";
}
//yxxx
else if (qianWan != 0 && baiWan == 0
&& shiWan == 0 && wan == 0) {
result += digitToChinese(qianWan) + "仟" +"萬";
}
//yxxy
else if (qianWan != 0 && baiWan == 0
&& shiWan == 0 && wan != 0) {
result += digitToChinese(qianWan) + "仟零" +
digitToChinese(wan) +"萬";
}
//yxyx
else if (qianWan != 0 && baiWan == 0
&& shiWan != 0 && wan == 0) {
result += digitToChinese(qianWan) + "仟零" +
digitToChinese(shiWan) + "拾" +
"萬";
}
//yyxx
else if (qianWan != 0 && baiWan != 0
&& shiWan == 0 && wan == 0) {
result += digitToChinese(qianWan) + "仟" +
digitToChinese(baiWan) +
"佰萬";
}
//yxyy
else if (qianWan != 0 && baiWan == 0
&& shiWan != 0 && wan != 0) {
result += digitToChinese(qianWan) + "仟零" +
digitToChinese(shiWan) + "拾" +
digitToChinese(wan) +
"萬";
}
//yyxy
else if (qianWan != 0 && baiWan != 0
&& shiWan == 0 && wan != 0) {
result += digitToChinese(qianWan) + "仟" +
digitToChinese(baiWan) + "佰零" +
digitToChinese(wan) + "萬";
}
//yyyx
else if (qianWan != 0 && baiWan != 0
&& shiWan != 0 && wan == 0) {
result += digitToChinese(qianWan) + "仟" +
digitToChinese(baiWan) + "佰" +
digitToChinese(shiWan) +"拾萬";
}
return result ;
}
/**
* 处理千百个十位上面的数值
* @param integerQian
* @param integerBai
* @param integerShi
* @param integerGe
* @param decimal
* @return
*/
public static String lowFour(int integerQian,int integerBai,int integerShi,int integerGe,int decimal) {
String result = "";
//16种(2*2*2*2),integer为0或非0两种选择
/**
* xxxx
* xxxy
* xxyx
* xyxx
* xyyx
* xyxy
* xyyy
* xxyy
*
* yyyy
* yxxx
* yxxy
* yxyx
* yyxx
* yxyy
* yyxy
* yyyx
*/
//xxxx
if (integerQian == 0 && integerBai == 0
&& integerShi == 0 && integerGe == 0) {
result += "圆" + decimal(decimal);
}
//xxxy
else if (integerQian == 0 && integerBai == 0
&& integerShi == 0 && integerGe != 0) {
result += "零" + digitToChinese(integerGe) + "圆" + decimal(decimal);
}
//xxyx
else if (integerQian == 0 && integerBai == 0
&& integerShi != 0 && integerGe == 0) {
result += "零" + digitToChinese(integerShi) + "拾圆" + decimal(decimal);
}
//xyxx
else if (integerQian == 0 && integerBai != 0
&& integerShi == 0 && integerGe == 0) {
result += "零" + digitToChinese(integerBai) + "佰圆" + decimal(decimal);
}
//xyyx
else if (integerQian == 0 && integerBai != 0
&& integerShi != 0 && integerGe == 0) {
result += "零" + digitToChinese(integerBai) + "佰" +
digitToChinese(integerShi) + "拾圆" + decimal(decimal);
}
//xyxy
else if (integerQian == 0 && integerBai != 0
&& integerShi == 0 && integerGe != 0) {
result += "零" + digitToChinese(integerBai) + "佰零" +
digitToChinese(integerGe) + "圆" + decimal(decimal);
}
//xyyy
else if (integerQian == 0 && integerBai != 0
&& integerShi != 0 && integerGe != 0) {
result += "零" + digitToChinese(integerBai) + "佰" +
digitToChinese(integerShi) + "拾" +
digitToChinese(integerGe) +"圆" + decimal(decimal);
}
//xxyy
else if (integerQian == 0 && integerBai == 0
&& integerShi != 0 && integerGe != 0) {
result += "零" + digitToChinese(integerShi) + "拾" +
digitToChinese(integerGe) +"圆" + decimal(decimal);
}
//yyyy
else if (integerQian != 0 && integerBai != 0
&& integerShi != 0 && integerGe != 0) {
result += digitToChinese(integerQian) + "仟" +
digitToChinese(integerBai) + "佰" +
digitToChinese(integerShi) + "拾" +
digitToChinese(integerGe) +
"圆" + decimal(decimal);
}
//yxxx
else if (integerQian != 0 && integerBai == 0
&& integerShi == 0 && integerGe == 0) {
result += digitToChinese(integerQian) + "仟" +"圆" + decimal(decimal);
}
//yxxy
else if (integerQian != 0 && integerBai == 0
&& integerShi == 0 && integerGe != 0) {
result += digitToChinese(integerQian) + "仟零" +
digitToChinese(integerGe) +"圆" + decimal(decimal);
}
//yxyx
else if (integerQian != 0 && integerBai == 0
&& integerShi != 0 && integerGe == 0) {
result += digitToChinese(integerQian) + "仟零" +
digitToChinese(integerShi) + "拾" +
"圆" + decimal(decimal);
}
//yyxx
else if (integerQian != 0 && integerBai != 0
&& integerShi == 0 && integerGe == 0) {
// result += "零" + digitToChinese(integerShi) + "拾" +
// digitToChinese(integerGe) +
// " 圆qian 13 (yyxx)" + decimal(decimal);
result += digitToChinese(integerQian) + "仟" +
digitToChinese(integerBai) +
"佰圆" + decimal(decimal);
}
//yxyy
else if (integerQian != 0 && integerBai == 0
&& integerShi != 0 && integerGe != 0) {
result += digitToChinese(integerQian) + "仟零" +
digitToChinese(integerShi) + "拾" +
digitToChinese(integerGe) +
"圆" + decimal(decimal);
}
//yyxy
else if (integerQian != 0 && integerBai != 0
&& integerShi == 0 && integerGe != 0) {
result += digitToChinese(integerQian) + "仟" +
digitToChinese(integerBai) + "佰零" +
digitToChinese(integerGe) + "圆" + decimal(decimal);
}
//yyyx
else if (integerQian != 0 && integerBai != 0
&& integerShi != 0 && integerGe == 0) {
result += digitToChinese(integerQian) + "仟" +
digitToChinese(integerBai) + "佰" +
digitToChinese(integerShi) +"拾圆" + decimal(decimal);
}
return result ;
}
public static String lowThree(int integerBai, int integerShi,int integerGe, int decimal) {
String result = "";
//8种(2*2*2),integer为0或非0两种选择,y代表非0,x代表0
//yyy
if (integerBai != 0
&& integerShi != 0 && integerGe != 0) {
result += digitToChinese(integerBai) + "佰" +
digitToChinese(integerShi) + "拾" +
digitToChinese(integerGe) + "圆" + decimal(decimal);
}
//xxx
else if (integerBai == 0
&& integerShi == 0 && integerGe == 0) {
result += "圆" + decimal(decimal);
}
//yyx
else if (integerBai != 0
&& integerShi != 0 && integerGe == 0) {
result += digitToChinese(integerBai) + "佰" +
digitToChinese(integerShi) + "拾圆" + decimal(decimal);
}
//yxy
else if (integerBai != 0
&& integerShi == 0 && integerGe != 0) {
result += digitToChinese(integerBai) + "佰零" +
digitToChinese(integerGe) + "圆" + decimal(decimal);
}
//xyy
else if (integerBai == 0
&& integerShi != 0 && integerGe != 0) {
result += "零" + digitToChinese(integerShi) + "拾" +
digitToChinese(integerGe) + "圆" + decimal(decimal);
}
//xxy
else if (integerBai == 0
&& integerShi == 0 && integerGe != 0) {
result += "零" + digitToChinese(integerGe) + "圆" + decimal(decimal);
}
//yxx
else if (integerBai != 0
&& integerShi == 0 && integerGe == 0) {
result += digitToChinese(integerBai) + "佰" +
"圆" + decimal(decimal);
}
//xyx
else if (integerBai == 0
&& integerShi != 0 && integerGe == 0) {
result += "零" + digitToChinese(integerShi) + "拾"
+"圆" + decimal(decimal);
}
return result;
}
public static String lowTwo(int integerShi, int integerGe, int decimal) {
String result = "";
//4种(2*2),integer为0或非0两种选择,y代表非0,x代表0
//yy
if (integerShi != 0 && integerGe != 0) {
result += digitToChinese(integerShi) + "拾" +
digitToChinese(integerGe) + "圆" + decimal(decimal);
}
//xx
else if (integerShi == 0 && integerGe == 0) {
result += "圆" + decimal(decimal);
}
//yx
else if (integerShi != 0 && integerGe == 0) {
result += digitToChinese(integerShi) + "拾圆" + decimal(decimal);
}
//xy
else if (integerShi == 0 && integerGe != 0) {
result += "零" + digitToChinese(integerGe) + "圆" + decimal(decimal);
}
return result;
}
public static String decimal(int decimal) {
String result = "";
int jiao = decimal / 10;
int fen = decimal % 10;
if (jiao == 0 && fen == 0) {
result += "整";
}
else{
if (jiao != 0 && fen == 0) {
result += digitToChinese(jiao) + "角";
}
else if (jiao == 0 && fen != 0) {
result += digitToChinese(fen) + "分";
}
else if (jiao != 0 && fen != 0) {
result += digitToChinese(jiao) + "角" +
digitToChinese(fen) + "分";
}
}
return result;
}
public static String digitToChinese(int integer) {
String result = "";
if (integer == 1) {
result = "壹";
} else if (integer == 2) {
result = "贰";
} else if (integer == 3) {
result = "叁";
} else if (integer == 4) {
result = "肆";
} else if (integer == 5) {
result = "伍";
} else if (integer == 6) {
result = "陆";
} else if (integer == 7) {
result = "柒";
} else if (integer == 8) {
result = "捌";
} else if (integer == 9) {
result = "玖";
}
return result;
}
}