数据类型
八大基本数据类型
public class DataType {
public static void main(String[] args) {
//8大基本数据类型
//整数
int num1 = 10; //最常用,4字节,21亿
byte num2 = 20; //一个字节,-128-127;
short num3 = 30; //2个字节。-32768-32767
long num4 = 30L; //8个字节,数值近乎无穷,Long类型要在数字后加个L
//小数,浮点数
float num5 = 50.1F; //float数据类型要在数字后加个F,4个字节
double num6 = 3.1415926; //8个字节
//字符
char name = '中'; //一个字节
//字符串,String 不是关键字,是类
String English_Name = "亲人";
//布尔值
boolean flag = true; //占一位,其值只有true和false两个
}
}
数据类型拓展
public class DataExpand {
public static void main(String[] args) {
/**
* 数据类型拓展
*/
//======整数拓展,进制,二进制0b,十进制,八进制0,十六进制0x
int i = 10;
int i2 = 010; //八进制0
int i3 = 0x10; //十六进制0x
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("===============================");
//======浮点数拓展 银行业务怎么表示?钱
//BigDecimal
//====================================
//float 有限 离散 舍入误差 大约 接近但不等于
// double
//最好完全使用浮点数进行比较
float f = 0.1f; //0.1
double f2 = 1.0/10; //0.1
System.out.println(f==f2); //false
System.out.println(f);
System.out.println(f2);
//那如何正确比较浮点数呢,这里有两种方案
float d1 = 2313231323132313f;
float d2 = d1 + 1;
System.out.println(d1==d2);//true
//=================================================
//字符拓展?
//============================================
System.out.println("===================");
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);//强制转换
System.out.println(c2);
System.out.println((int)c2);//强制转换
//所有的字符本质还是数字
//编码 Unicode 表(97=a,65=A) 2字节 0-65536 Excel最大记录行数 2^16 = 65536
//U0000-UFFFF
char c3 = '\u0061';
System.out.println(c3);//97
//转义字符
// \t 制表符
// \n 换行符
System.out.println("Hello\tWorld!");
System.out.println("===========String对象补充=========");
//对象,从内存分析
String sa = new String("Hello World");
String sb = new String("Hello World");
System.out.println(sa==sb);//false
String sc = "Hello World";
String sd = "Hello World";
System.out.println(sc==sd);//true
//======布尔值拓展=======
boolean flag = true;
if(flag==true){
}
if(flag) {
}//意思相同,这种更精简
}
}
如何正确比较浮点数大小?
引用
版权声明:本文为CSDN博主「致寿有道」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_31282459/article/details/114430355
//=========浮点数如何比较大小?
System.out.println("====浮点数比较大小====");
double db1 = .1 * 3;
double db2 = .3;
System.out.println(db1);//0.30000000000000004
System.out.println(db2);//0.3
System.out.println(db1 == db2);//false
按照正常逻辑来看,db1经过计算之后的结果应该是0.3,最后打印的结果应该是 true,对吧?但是运行一下就会发现结果并不是 true 而是 false 。
输出一下 db1,发现得到的答案不是想象中的 0.3 而是 0.30000000000000004,所以和 db2 进行比较结果自然是 false
如何正确地比较浮点数(单精度的 float 和双精度的 double),不单单是 Java 特定的问题,在计算机的内存中,存储浮点数时使用的是 IEEE 754 标准,就会有精度的问题。
存储和转换的过程中浮点数容易引起一些较小的舍入误差,正是这个原因,导致在比较浮点数的时候,不能使用“==”操作符——要求严格意义上的完全相等。
那么如何正确比较浮点数呢,这里有两种方案
第一种方案是允许两个值之间存在一点误差(指定一个阈值),使用 Math.abs() 方法来计算两个浮点数之间差异的绝对值,如果这个差异在阈值范围之内,我们就认为两个浮点数是相等的。
final double THRESHOLD = .0001;
double d1 = .1 * 3;
double d2 = .3;
if(Math.abs(d1-d2) < THRESHOLD) {
System.out.println("d1 和 d2 相等");
} else {
System.out.println("d1 和 d2 不相等");
}
Math.abs() 方法用来返回 double 的绝对值,如果 double 小于 0,则返回 double 的正值,否则返回 double。也就是说,abs() 后的结果绝对大于 0,如果结果小于阈值(THRESHOLD),我们就认为 d1 和 d2 相等。
第二种方案是使用 BigDecimal 类,可以指定要舍入的模式和精度,这样就可以解决舍入的误差。以使用 BigDecimal 类的 compareTo() 方法对两个数进行比较,该方法将会忽略小数点后的位数,怎么理解这句话呢?比如说 2.0 和 2.00 的位数不同,但它俩的值是相等的。a.compareTo(b) 如果 a 和 b 相等,则返回 0,否则返回 -1。
tips: 不要使用 equals() 方法对两个 BigDecimal 对象进行比较,这是因为 equals() 方法会考虑位数,如果位数不同,则会返回 false,尽管数学值是相等的。
BigDecimal a = new BigDecimal("2.00");
BigDecimal b = new BigDecimal("2.0");
System.out.println(a.equals(b));
System.out.println(a.compareTo(b) == 0);
上面的代码中 a.equals(b) 的结果就为 false,因为 2.00 和 2.0 小数点后的位数不同,但 a.compareTo(b) == 0 的结果就为 true,因为 2.00 和 2.0 在数学层面的值的确是相等的。
接下来,用 BigDecimal 来解决开头的问题。
BigDecimal d1 = new BigDecimal("0.1");
BigDecimal three = new BigDecimal("3");
BigDecimal d2 = new BigDecimal("0.3");
d1 = d1.multiply(three);
System.out.println("d1 = " + d1);
System.out.println("d2 = " + d2);
System.out.println(d1.compareTo(d2));
程序输出的结果如下:
d1 = 0.3
d2 = 0.3
0
d1 和 d2 都为 0.3,所以 compareTo() 的结果就为 0,表示两个值是相等的。
总结一下,在遇到浮点数的时候,千万不要使用 == 操作符来进行比较,因为有精度问题。要么使用阈值来忽略舍入的问题,要么使用 BigDecimal 来替代 double 或者 float