引言
- 在记录自己自学java过程中,首先声明关于学习顺序可能并不很科学,即使我也是通过一些公开的资料来进行学习,但不会是完全无基础的教学,更像是比对着python(本人平时编程使用的是python)比较实现方法的异同学习,请酌情参考学习,有理解不对的地方欢迎指正。
java基础 - 5
浮点数运算
- 浮点数运算只能进行加减乘除这些数值计算,不能做位运算和移位运算(虽然不懂这俩运算的具体使用场景但是因为都需要转换成二进制操作,所以也很好理解不能实现的原因),除此之外还会出现无法精确表示的问题(python还没Java分的清晰,更无法精确表示了...)
public class Main {
public static void main(String[] args) {
double x = 1.0 / 10;
double y = 1 - 9.0 / 10;
System.out.println(x);
System.out.println(y);
}
}
- 运行结果如下(显然不等),可想而知如果用这个作为判断条件必然是要报错的
- 想起来大学时候一个类似问题就是,为何1/3*3 = 1,1/3= 0.3无限循环,乘以3是0.9的循环却不是1,这是因为0.9的无限循环其实就是1,等式没有错误

- 那么如何比较浮点数的运算呢?
- 由于浮点数存在运算误差,所以可以采用的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数:比如0.00000000001
类型提升
- 浮点数计算也同样有类型提升的问题,如图24.0/5应该取整数部分也就是4的,但是结果却是6,说明发生了类型提升
public class Main {
public static void main(String[] args) {
int n = 5;
double d = 1.2 + 24.0 / n;
System.out.println(d);
}
}


强制转型
- 将浮点数强制转型为整数时候,浮点数的小数部分会被丢掉。
- 如果转型后超过了整型能表示的最大范围,将返回整型的最大值