首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

javaj、条件判断中值精度有关问题

2013-07-16 
javaj、条件判断中值精度问题条件判断时很容易忽略的问题就是数据精度,引起我思考这个问题是由于下面的代码

javaj、条件判断中值精度问题
  条件判断时很容易忽略的问题就是数据精度,引起我思考这个问题是由于下面的代码

        private double pi=Math.PI;        private double rockangle=pi/4;        private double addangle=pi/36;        private int a=1;for(int i=0;i<500;i++){      if(a==1){  rockangle=rockangle+addangle;           if(rockangle==pi/3){                         a=2;               System.out.println("111111111111111111");}}               if(a==2){rockangle=rockangle-addangle;if(rockangle==pi/6){       a=1;      System.out.println("222222222222222222");}System.out.println("rockangle="+rockange);}}
  
  我的原意是让rockangle在30度角和60度角中来回摆动,但却发现rockangle的值出现了负值!     最终发现是判断时数据的精度引发的问题,解决办法也很简单,用其他数据类型的变量去参与判断就可以了。
    继续试验发现只有浮点型数据类型会发生这种情况:
1、double 和 double 类型的比较
public static void main(String[] args) {   //float和float 小数点后七位   //double和double 小数点后16位   //double 和 float比较   小数点后可以有0 但是不能有其他值  否则为不相等      double   a=1.340000789;     double   b=1.340000345;if(a==b){System.out.println("相等");}else{System.out.println("不相等");}}

     double 和 double 类型的比较, 会比较到小数点后16位 也就是说小数点后16位是相同的那么就是相同的,但要是小数点后16位内有一点点不同那么也是不相同的!(就是上面角度判断遇到的问题)

2、 float和float类型的比较:
      这和double类型类似 ,只是会比较到小数点后七位。
3、float和double类型比较:
 
public static void main(String[] args) {      float     a=1.00000000f;      double   b=1.00000000;if(a==b){System.out.println("相等");}else{System.out.println("不相等");}}

  这有点不同,就是只能比较整数部分,小数点后有不为0的数存在,就是不相同的,但要是只有0,那么也是相同的。


从表面上我就发现这么多,具体原因留待以后。







热点排行