在计算机中,浮点数虽然表示的范围大,但是,浮点数有个非常重要的特点,就是浮点数常常无法精确表示。

由于浮点数存在运算误差,所以比较两个浮点数是否相等常常会出现错误的结果。正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数:

  1. //比较x和y是否相等,先计算其差的绝对值
  2. double r = Math.abs(x -y);
  3. //再判断绝对值是否足够小
  4. if(r < 0.00001) {
  5. //可以认为相等
  6. } else {
  7. //不相等
  8. }

两个整数的运算不会出现自动提升的情况。

  1. double d = 1.2 + 24 / 5; //5.2

将浮点数强制转型为整数时,会将浮点数的小数部分丢掉,如果转型后超过了整型的最大范围,将返回整型的最大值。
如果要进行四舍五入,可以对浮点数加上0.5再强制转型

练习:
根据一元二次方程ax_2+_bx+c=0 的求根公式:
浮点数运算 - 图1
计算出一元二次方程的两个解:

  1. public class Main{
  2. public static void main(String[] args) {
  3. double a = 1.0;
  4. double b = 3.0;
  5. double c = -4.0;
  6. //求平方根可以用Math.sqrt()
  7. //System.oug.println(Math.sqrt(2)); ==> 1.414
  8. //double r1 = 0;
  9. //double r2 = 0;
  10. double r1 = Math.sqrt(b*b - (4*a*c));
  11. double r2= (-b - r1) / (2 * a);
  12. r1 = (-b + r1) / (2 * a);
  13. System.out.println(r1);
  14. System.out.println(r2);
  15. System.out.print(r1 == 1 && r2 == -4 ? "测试通过" "测试失败”);
  16. }
  17. }

小结

  • 浮点数常常无法精确表示。
  • 浮点数只能进行加减乘除这些数值计算,不能做位运算和移位运算。
  • 两个整数的运算不会出现自动提升的情况。
  • 如果要进行四舍五入,可以对浮点数加上0.5再强制转型