我想比较两个双重值:
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语句?
答案 0 :(得分:5)
假设latitude
和longitude
也是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()