浮点数 运算和整数运算相比,只能进行加减乘除这些数值计算,不能做位运算和移位运算。浮点数有个非常重大的特点,就是无法准确 表示。
可以看一个例子
public class Main {
public static void main(String[] args) {
double x = 1.0 / 10;
double y = 1 - 9.0 / 10;
// 观察x和y是否相等:
System.out.println(x);
System.out.println(y);
}
}
我们看下最后的结果
在判断的时候,我们可以做一些取舍,比如在一个合理的范围内可以认为二者相等。
public class Main {
public static void main(String[] args) {
double x = 1.0 / 10;
double y = 1 - 9.0 / 10;
// 观察x和y是否相等:
System.out.println(x);
System.out.println(y);
double r = Math.abs(x - y);
// 再判断绝对值是否足够小:
if (r < 0.00001) {
System.out.println("可以认为相等");// 可以认为相等
} else {
System.out.println("不相等");// 不相等
}
}
}
结果
浮点数在内存的表示方法和整数比更加复杂。
如果参与运算的两个数其中一个是 整型 ,那么整型可以自动提升到 浮点 型
public class Main {
public static void main(String[] args) {
int n = 5;
double d = 1.3 +35.0 / n;
System.out.println(d);
}
}
结果
需要特别注意,在一个复杂的 四则运算 中,两个整数的运算不会出现自动提升的情况。例如
public class Main {
public static void main(String[] args) {
double d = 1.2 +26 / 5;
System.out.println(d);
}
}
结果
整数运算在除数为 0 时会报错,而浮点数运算在除数为 0 时,不会报错,但会返回几个特殊值:
- NaN 表示Not a Number
- Infinity 表示无穷大
- -Infinity 表示负无穷大
例如:
public class Main {
public static void main(String[] args) {
double d=0.0/0;
System.out.println(d);
double m=1.0/0;
System.out.println(m);
double h=-1.0/0;
System.out.println(h);
}
}
结果
在实际生活中很少遇到,了解下
在学习中,可以将浮点数强制转型为整数。
public class Main {
public static void main(String[] args) {
int n1 = (int) 12.3;
System.out.println(n1);
int n2 = (int) 12.7;
System.out.println(n2);
int n4 = (int) -12.7;
System.out.println(n4);
}
}
看下最后的输出