Java之浮点数运算

Posted minseo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java之浮点数运算相关的知识,希望对你有一定的参考价值。

  浮点数运算和整数运算相比,只能进行加减乘除这些数值运算,不能做位运算和移位运算。

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

  举例

  浮点数0.1在计算机中就无法精确表示,因为十进制的0.1换算成二进制是一个无限循环小数,很显然,无论使用float还是double,都只能存储一个0.1的近似值。但是,0.5这个浮点数又可以精确地表示。因为浮点数常常无法精确表示,因此,浮点数运算会产生误差:

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);
    }
}

   运行结果

0.1
0.09999999999999998

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

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);
     double r=Math.abs(x-y);
     if(r<0.00001) {
    	 System.out.println("true");
     }
     else {
    	 System.out.println("false");
     }
    }
}

   浮点数在内存的表示方法和整数比更加复杂。Java的浮点数完全遵循IEEE-754标准,这也是绝大多数计算机平台都支持的浮点数标准表示方法。

以上是关于Java之浮点数运算的主要内容,如果未能解决你的问题,请参考以下文章

转载程序员必知之浮点数运算原理详解

Java小白入门200例03之浮点数的加减乘除余

C之浮点数

JVM之浮点数(float)表示

小白入门C语言之浮点数详解

编程规范之浮点数的比较