繁体   English   中英

比较android中的两个Double值

[英]Comparing two Double Values in 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分配任何值时。但是在log中有纬度和纬度的相同值。任何一个请告诉我这里有什么错误比较为什么它不执行txt.settext语句?

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

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

或者只是使用equals

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

它来自引擎盖下的第一行。

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

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个符号。

如果纬度和经度也是Double s,则需要使用equals而不是==运行比较:

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

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

只需使用原语而不是Double Classes。

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()提取double值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM