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,那么也是相同的。


从表面上我就发现这么多,具体原因留待以后。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值