比较android中的两个Double值

时间:2012-12-13 14:37:52

标签: java android

我想比较两个双重值:

for(int i=0;i<count;i++){
    Double i1=Double.parseDouble(pref.getString("longitude"+i, null));
    Double i2=Double.parseDouble(pref.getString("latitude"+i,null));
    Log.i("Longitude", i1+"");
    Log.i("Latitude",i2+"");
    Log.i("Longitude1",longitude+"");
    Log.i("Latitude1", latitude+"");
    Log.i("note",pref.getString("note"+i, null));


    if(longitude==i1&&latitude==i2) {
        String note=pref.getString("note"+i, null);
        txt.setText(note);
    }
}

共享首选项中有一个组合与经度和纬度相匹配,但是当我比较它没有为textview txt分配任何值时。但是在日志中有纬度和纬度的相同值。任何一个请告诉我们什么错误的比较为什么它不执行txt.settext语句?

4 个答案:

答案 0 :(得分:5)

假设latitudelongitude也是Double,请尝试调用两者的doubleValue

if(longitude.doubleValue() == i1.doubleValue() && latitude.doubleValue() == i2.doubleValue())

或只使用equals

if(longitude.equals(i1) && latitude.equals(i2))

引自第一行,在引擎盖下。

答案 1 :(得分:3)

我认为存在准确性问题 - 浮动或双炮等类型绝对严格。当我需要比较两个双打时,我会使用类似这样的东西

double doubleToCompare1 = some double value;
double doubleToCompare2 = another double value;
double EPS = 0.00001;

if(Math.abs(doubleToCompare1-doubleToCompare2)<EPS){
   // assuming doubles are equals
}

EPS值取决于您需要的准确度。对于坐标,我记得它是逗号后的6或7符号。

答案 2 :(得分:1)

如果纬度和经度也是Double,则需要使用equals代替==进行比较:

(longitude.equals(i1) && latitude.equals(i2))

如果它们是double s(即原语),则这不是必需的,问题出在其他地方。

答案 3 :(得分:0)

只需使用 double 原语代替 Double 类。

for(int i=0;i<count;i++){
    double i1=Double.parseDouble(pref.getString("longitude"+i, null));
    double i2=Double.parseDouble(pref.getString("latitude"+i,null));
    Log.i("Longitude", i1+"");
    Log.i("Latitude",i2+"");
    Log.i("Longitude1",longitude+"");
    Log.i("Latitude1", latitude+"");
    Log.i("note",pref.getString("note"+i, null));


    if(longitude==i1&&latitude==i2) {
        String note=pref.getString("note"+i, null);
        txt.setText(note);
    }
}

我不知道您的经度和纬度变量是什么类型。如果它们是原始的(双重的),那么就不应该做任何事情。如果它们是Double对象,请将它们更改为基元,或使用logitude.doubleValue()

提取双值