目录
数据类型转换
一、数据类型转换有两种方式
自动类型转换(默认的类型转换)
也叫向上转型。表示范围小的数据类型(如byte)可以直接转换成范围大的数据类型(如int),这种方式称为自动类型转换。
格式:
范围更大的数据类型 变量名 = 范围比较小的那个类型的数据;
强制类型转换
也叫向下转型。表示范围大的数据类型(如int)不可以转换成范围小的数据类型(如byte),但可以强制转,这种方式称为强制类型转换。
格式:
范围小的数据类型 变量名 = (范围小的数据类型) 范围大的数据类型的数据;
二、转换规律
各种数据类型按照数据范围从小到大依次列出:范围小的类型向范围大的类型提升:byte- ->short=char‐‐>int‐‐>long‐‐>float‐‐>double
byte、short、char 运算时直接提升为int,同样的道理,当一个int 类型变量和一个double 变量运算时, int 类型将会自动提升为double 类型进行运算。
public static void main(String[] args) {
byte a = 1;
byte b = 2;
int c = a+b; // 正确,byte类型可以自动提升为int类型(小东西装大盒子中)
int d = 1;
int e = 2;
byte f = (byte)(d+e); // 这里需要强制类型转换,强制转换可能损失精度
}
浮点转成整数,直接去掉小数点,可能造成数据损失精度。
public static void main(String[] args) {
double d = 3.14;
int x = (int)d;
System.out.println(x); //3 损失精度
}
int 强制转成byte砍掉3个字节,可能造成数据丢失(丢失精度)。
public static void main(String[] args) {
int x = 128;
byte b = (byte)x;
System.out.println(b); // -128
}
三、浮点数运算问题
浮点数做运算结果不精确。
public static void main(String[] args) {
double x = 1.0;
double y = 0.9;
double result = x-y;
System.out.println(result); //0.09999999999999998
double a = 0.1;
double b = 0.2;
double result2 = a+b;
System.out.println(result2); //0.30000000000000004
}
四、类型转换练习
1、计算一年有多少毫秒(一年按365天计算)
public static void main(String[] args) {
//int result = 365*24*60*60*1000;
long result = 365*24*60*60*1000; // 计算的结果已经超出了int类型的最大范围
System.out.println(result);
}
2、整数的除法运算
public static void main(String[] args) {
int x = 10;
int y = 4;
int result = x/y;
System.out.println(result); // 2
double result2 = x/y;
System.out.println(result2); //2.0;
double result3 = (double)x/y; // 把x强转成double
System.out.println(result3); //2.5
double result4 = 1.0*x/y; // 低侵入式
System.out.println(result4);
}
3、浮点数 四舍五入取整 四舍五入取两位小数
public static void main(String[] args) {
double x = 3.4665;
//四舍五入取整数
int result = (int)(x+0.5);
System.out.println(result);
// 四舍五入保留两位小数
double result2 = (int)(x*100+0.5)/100.0;
System.out.println(result2);
}
上一篇:(7)Java基础语法 --变量