java double==Double_java之double类型数值的比较
先看demo:
public classL26 {/***@paramargs*/
public static voidmain(String[] args) {//TODO Auto-generated method stub//double a= 300000;
double x= 300000.00000000003;//double比較,小數(shù)點后有效位
double y= 300000.000000000003;//主要注意的是double類型直接==/>=/<=的比較,涉及到有效位
System.out.println(x<=300000);
System.out.println(y<=300000);
}
}/**output:
*false
true
**/
總結(jié):double是雙精度基本數(shù)據(jù)類型,double與double之間,涉及==(包括>=,<=)的比較,就得考慮double的精度問題。
如上面的例子,
當(dāng)x=300000.00000000003,與
300000比較,得到的是false,說明300000.00000000003>300000;
當(dāng)y=300000.000000000003,與
300000比較,得到的是true,說明300000.00000000003<=300000;(jvm實際判定的是300000.000000000003==300000)猛然看上去,感覺不對啊,應(yīng)該是大于啊。這就是double的精度問題。當(dāng)小數(shù)點后位數(shù) 大于(17-6)11位時,jvm就會忽略這個精度,這時的y=300000.00000000000。所以jvm就會判定y==300000.
這種情況,我們在開發(fā)時如果需要更精確的比較double類型,就要用到 BigDecimal 這個類了。
上面我為什么用17-6呢?看下這個例子:
public static voidmain(String[] args) {double x= 3.0000000000000003;//double比較,小數(shù)點后有效位:17-(整數(shù)位)??傆行粸?7位
double y= 30.000000000000003;//17位數(shù)字
double z= 300.00000000000003;double w= 3000.0000000000003;
System.out.println(x==3);
System.out.println(y==30);
System.out.println(z==300);
System.out.println(w==3000);
System.out.println("--------------------分界線-------------------");//小數(shù)后都加一個0
double x1= 3.00000000000000003;//18位數(shù)字
double y1= 30.0000000000000003;double z1= 300.000000000000003;double w1= 3000.00000000000003;
System.out.println(x1==3);
System.out.println(y1==30);
System.out.println(z1==300);
System.out.println(w1==3000);
}
}/*output:
false
false
false
false
--------------------分界線-------------------
true
true
true
true*/
總結(jié)
以上是生活随笔為你收集整理的java double==Double_java之double类型数值的比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中南民族大学java考试_中南民族大学J
- 下一篇: java 提取电话号码_java –