在Java中int類型數據的大小比較可以使用雙等號,double類型則不能使用雙等號來比較大小,如果使用的話得到的結果將永遠是不相等,即使兩者的精度是相同的也不可以。下面介紹兩種比較double數據是否相等的方法。
第一種方法:轉換成字符串
如果要比較的兩個double數據的字符串精度相等,可以將數據轉換成string然后借助string的equals方法來間接實現比較兩個double數據是否相等。注意這種方法只適用於比較精度相同的數據,並且是只用用於比較是否相等的情況下,不能用來判斷大小。
第二種方法:使用sun提供的Double.doubleToLongBits()方法
該方法可以將double轉換成long型數據,從而可以使double按照long的方法(<, >, ==)判斷是否大小和是否相等。
例如:
- Double.doubleToLongBits(0.01) == Double.doubleToLongBits(0.01)
- Double.doubleToLongBits(0.02) > Double.doubleToLongBits(0.01)
- Double.doubleToLongBits(0.02) < Double.doubleToLongBits(0.01)
第三種方法:
double a = 0.001;
double b = 0.0011;
BigDecimal data1 = new BigDecimal(a);
BigDecimal data2 = new BigDecimal(b);
data1.compareTo(data2)
非整型數,運算由於精度問題,可能會有誤差,建議使用BigDecimal類型!
當此 BigDecimal 在數字上小於、等於或大於 val 時,返回 -1、0 或 1。
第四種方法:
兩實數相等:兩實數的差在允許的范圍內認為相等既可認為是相等的。
范圍:1e-6(0.000001)
主要代碼:
int IsEqual(double a,double b){ return fabs(a-b) < 0.000001;}