您的位置:首页 > 其它

#码神心得_03# 浮点类型、char类型

2016-05-20 12:57 399 查看

这是码神Android第三次课程内容,主要讲了浮点类型、char类型的一些基础知识

        上次由于塞车让老师和同学们等了半个多钟才到,真的非常抱歉。。以后会尽量提前过去的。

心得总结:

1、浮点类型float::4个字节32位,1位符号位,8位指数位,23位尾数

2、浮点类型double: 8个字节64位,1位符号位,11位指数位,52位尾数

3、整数类型都是1位符号位其他位都是尾数

4、由于浮点类型有指数位的概念,故相比与同字节的整型数所表达的范围要广

5、由于浮点类型尾数位较少,故相比与同字节的整型数所表示的精确度要低

6、java中,默认的整型数为int类型,默认的浮点数为double类型

7、char类型:2字节     String类型为引用类型

8、转义字符:'\n'回车, '\t'制表符, '\\'反斜杠, '\''单引号, '\"'双引号

9、ASCII码:共127个字符,包括大小写字母和数字1-9和其他各种特殊字符,其中65表示'A',97表示'a'

10、Unicode编码:包含世界上各国语言文字字符,同时包含ASCII码所有字符,是ASCII的超集,共8万多种字符

11、Integer.toBinaryString(int:):将10进制数转化为2进制表达形式,返回字符串

12、System.currentTimeMillis():获取当前系统时间的毫秒表示数,常用来计算时间差或获取随机数

13、myeclipse操作:ctrl+D可以删除一行

14、分页读取数据: 类似于淘宝商品浏览, 只显示比较主要的一些信息在第一页显示,其他数据不读取,等到翻页的时候再进行读取显示,这样有利于节省内存,提高速度。

课堂作业:


编写程序,将浮点型数转换成人民币读法,如1006.33转换成(中文大写)壹仟零陆元叁角叁分

运行效果截图如下:

   

     



       


      

代码如下:

package com.mashen;

import javax.swing.JOptionPane;

/*
2. * @Description:这是一个能将消息对话框输入的一个数字转换成人民币读法的一个类
3. * @author: HongXin
4. * @date: 2016/5/20
5. * @version: 2.0
6. */

public class ChangeToRmb_1 {

public static void main(String[] args) {

// 显示对话框提示输入数字,并获取输入的数字的字符串形式
String inputValue = JOptionPane.showInputDialog("请输入一个不超过9位数的数字:");

//调用change类中的changeType方法得到结果并将结果赋值给字符串a
ChangeToRmb_1 ca = new ChangeToRmb_1();
String a = ca.changeType(inputValue);

// 弹出对话框显示处理结果
JOptionPane.showMessageDialog(null, inputValue + "\n转化为人名币读法为:\n" + a,
"系统信息", JOptionPane.INFORMATION_MESSAGE);

}

/*
* 此方法将传入的数转换成人民币读法
* @param:(String)
* @return:(String)返回结果是"fString"
*/
public String changeType(String inputValue) {

// 把数字赋值于a变量
double a = 0;

//判断输入的是否为数字,否则将抛出提示信息“请输入数字!”
try {
a = Double.parseDouble(inputValue);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "请输入数字!", "系统信息",
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}

int digit;// digit表示位数
long s = 10;

/*
* 判断位数大小
*/
for (digit = 0; digit < 100; digit++) {
if (a / s == 0) {

break;
} else if (a / s < 1) {
digit++;
break;
}
s *= 10;

}
// 输出输入的位数
System.out.println("输入的数为:"+inputValue+"\t"+digit + "位数");

// theMaxIndex代表最高位所在的下标
int theMaxIndex = 12 - digit;

// 求得每一位上的数字
a *= 1000;

long b = (long) (a);
int fen = (int) (b / 10 % 10);// 求得分位上的数
int jiao = (int) (b / 100 % 10);// 求得角位上的数
int yuan = (int) (b / 1000 % 10);// 求得个位上的数
int shi = (int) (b / 10000 % 10);// 求得十位上的数
int bai = (int) (b / 100000 % 10);// 求得百位上的数
int qian = (int) (b / 1000000 % 10);// 求得千位上的数
int wan = (int) (b / 10000000 % 10);// 求得万位上的数
int shiwan = (int) (b / 100000 / 1000 % 10);// 求得十万位上的数
int baiwan = (int) (b / 1000000000 % 10);// 求得百万位上的数
int qianwan = (int) (b / 1000000 / 10000 % 10);// 求得千位位上的数
int yi = (int) (b / 1000000 / 100000 % 10);// 求得亿位上的数
int shiyi = (int) (b / 10000000 / 100000 % 10);// 求得十亿位上的数
int baiyi = (int) (b / 10000000 / 1000000 % 10);// 求得百亿位上的数
int qianyi = (int) (b / 10000000 / 10000000 % 10);// 求得千亿位上的数

// int数组:number[]:存储从亿位到分位上的数
int[] number = { qianyi,baiyi,shiyi,yi, qianwan, baiwan, shiwan, wan, qian, bai, shi,
yuan, jiao, fen };

// String数组:numberString:以大写形式存储数组number[]的元素
String[] numberString = new String[14];

// String数组:digitName:存储位名
String[] digitName = { "仟", "佰", "拾", "", "仟", "佰", "拾", "", "仟", "佰",
"拾", "", "角", "分" };

String[] nStrings = { "零", "壹", "贰", "叄", "肆", "伍", "陆", "柒", "捌", "玖" };

/*
* 将number[]中数字转化为大写形式,存储到numberString[]中
*/
System.out.println("数字和位名结合如下:");
for (int k = 0; k < 14; k++) {
for (int j = 0; j < 10; j++) {
if (number[k] == j) {
numberString[k] = nStrings[j];

}
}
System.out.print(numberString[k]+digitName[k]);
}
System.out.println();
// String数组:Strings1:初步将数字与位数相结合
String[] strings1 = new String[40];

// 初始化Strings1数组
for (int j = 0; j < strings1.length; j++) {
strings1[j] = "";
}

int p = 0;

/*
* 从最高位开始循环
* 将数字与位名相结合并一一存放在Strings1数组
* 若数字为零,则只传入数字,不传入位名
* 亿位、万位、个位区别对待
*
*/
for (; theMaxIndex < numberString.length; theMaxIndex++) {

// 若最高位为亿位及以上,将亿位上的数字传入Strings1数组 ,再另外传位名“亿”
if (theMaxIndex == 3&&(number[0] != 0 || number[1] != 0 || number[2] != 0 || number[3] != 0)) {

strings1[p] = numberString[theMaxIndex];
p++;
// 另外传位名“亿”
strings1[p] = "亿";
p++;

}
// 若最高位在万位及以上,则循环到万位时将万位上的数字传入Strings1数组 ,再另外传位名“萬”
else if (theMaxIndex == 7
&& (number[0] != 0 || number[1] != 0 || number[2] != 0
|| number[3] != 0 || number[4] != 0
|| number[5] != 0 || number[6] != 0
|| number[7] != 0 )) {

strings1[p] = numberString[theMaxIndex];
p++;
// 另外传位名“萬”
if (number[4] != 0 || number[5] != 0 || number[6] != 0
|| number[7] != 0) {
strings1[p] = "萬";
p++;
}
}
// 若最高位在个位及以上,则循环到个位时将个位上的数字传入Strings1数组 ,再另外传位名“圆”
else if (theMaxIndex == 11
&& (number[0] != 0 || number[1] != 0 || number[2] != 0
|| number[3] != 0 || number[4] != 0
|| number[5] != 0 || number[6] != 0
|| number[7] != 0 || number[8] != 0 || number[9] != 0
|| number[10] != 0 || number[11] != 0)) {

strings1[p] = numberString[theMaxIndex];
p++;

strings1[p] = "圆";
p++;

}
// 若最高位比个位低,则个位的数字和位名将不传入Strings1数组
else if (theMaxIndex == 11 && number[11] == 0) {

}
// 以上几种情况之外,若某位上数字为0,则该位名不传入数组,只传数字“零”
else if (numberString[theMaxIndex] == "零") {

digitName[theMaxIndex] = "";

if (theMaxIndex != 12) {
strings1[p] = numberString[theMaxIndex];
p++;
}

}
// 其他情况,直接传数字和位名入数组Strings1
else {

strings1[p] = numberString[theMaxIndex];
p++;
strings1[p] = digitName[theMaxIndex];
p++;

}
}

/*
* 在控制台输出Strings1[]数组
*/
System.out.print("Strings1:");
for (int j = 0; j < strings1.length; j++) {

System.out.print(strings1[j]);
}
System.out.println();

/*
* Strings数组中,相邻两个及以上所有的零,只保留第一个零,其他的零转换为"口"
*/
for (int j = 0; j < strings1.length; j++) {

if (strings1[j] == "零") {
if (strings1[j + 1] == "零") {
if (strings1[j + 2] == "零") {
if (strings1[j + 3] == "零") {
if (strings1[j + 4] == "零") {
if (strings1[j + 5] == "零") {
if (strings1[j + 6] == "零") {
if (strings1[j + 7] == "零") {
if (strings1[j + 8] == "零") {
if (strings1[j + 9] == "零") {
if (strings1[j + 10] == "零") {
strings1[j + 10] = "口";
}
strings1[j + 9] = "口";
}
strings1[j + 8] = "口";
}
strings1[j + 7] = "口";
}
strings1[j + 6] = "口";
}
strings1[j + 5] = "口";
}
strings1[j + 4] = "口";
}
strings1[j + 3] = "口";
}
strings1[j + 2] = "口";
}
strings1[j + 1] = "口";
}
}

}

// 输出转换为“口”后的strings1
System.out.print("Strings1:");
for (int j = 0; j < strings1.length; j++) {

System.out.print(strings1[j]);

}

/*
* 创建一个数组strings2作为最后的结果输出,并初始化该数组
*/
String[] strings2 = new String[40];
for (int j = 0; j < strings2.length; j++) {
strings2[j] = "";
}

/*
* 将strings1中除了“口”元素外的其他元素一一传入strings2数组中
*/
int n = 0;
for (int j = 0; j < strings1.length; j++) {
if (!strings1[j].equals("口") ) {
strings2
= strings1[j];
n++;
}

}

// 输出strings2数组
System.out.println();
System.out.print("strings2:");
for (int j = 0; j < strings2.length; j++) {

System.out.print(strings2[j]);
}

/*
* 完善strings2数组
* 除去不合理的“零”
* 除去一些其他的bug
*
*/
for (int j = 0; j < strings2.length; j++) {

// 去除如:1000000000显示"壹拾零亿"的bug
if (strings2[j].equals("亿")) {

if (strings2[j - 1].equals("零")) {
strings2[j - 1] = "";
}
}

// 去除如:100000显示"壹拾零萬"的bug
if (strings2[j].equals("萬")) {

if (strings2[j - 1].equals("零")) {
strings2[j - 1] = "";
}
}

/*
* 去除如:10显示"壹拾零圆"的bug
* 去除如:1.00显示"壹圆零"的bug
*/
if (strings2[j].equals("圆")) {

if (strings2[j - 1].equals("零")) {
strings2[j - 1] = "";

}
if (strings2[j + 1].equals("零")) {
strings2[j + 1] = "";

}

}

/*
* 去除如:0.10显示"壹角零"的bug
*/
if (strings2[j].equals("角")) {

if (strings2[j - 1].equals("零")) {
strings2[j - 1] = "";
}
if (strings2[j + 1].equals("零")) {
strings2[j + 1] = "";
}

}

// 若没有角位和分位,直接在后面加整,例如“十元整”
// if (strings2[j].equals("圆")) {
//
// if (strings2[j + 1].equals("")) {
// strings2[j + 1] = "整";
// }
//
//
// }

}

/*
* 输出最后的结果
*/
System.out.println();
System.out.print("strings2:");
String fString = "";
for (int j = 0; j < strings2.length; j++) {
fString =fString+""+strings2[j];

System.out.print(strings2[j]);
}
// 返回最终结果字符串
return fString;

}

}


纯手打原创!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: