第三次课总结及思考

在码神的第三次课,我们学的仍是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;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值