4

2 つの 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);
    }
}

共有設定には、経度と緯度に一致する組み合わせが 1 つありますが、比較すると、textview txt に値を割り当てていませんが、ログには緯度と緯度に同じ値があります。比較 txt.settext ステートメントを実行しないのはなぜですか?

4

4 に答える 4

6

精度の問題があると思います - フロートやダブルキャノンなどのタイプは絶対に厳密に表現されます。2 つの double を比較する必要がある場合は、次のようなものを使用します

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記号です。

于 2012-12-13T14:54:30.977 に答える
5

ともそうであると仮定latitudeして、両方の を呼び出してみてください。longitudeDoubledoubleValue

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

または単に使用するequals

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

これは、ボンネットの下の最初の行で派生します。

于 2012-12-13T14:43:22.183 に答える
1

緯度と経度も s の場合は、代わりに を使用Doubleして比較を実行する必要があります。equals==

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

それらがdoubles (つまりプリミティブ) である場合、これは必要なく、問題は別の場所にあります。

于 2012-12-13T14:43:35.983 に答える
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) である場合、mor は何も実行されません。それらが Double オブジェクトの場合は、それらをプリミティブに変更するか、double 値を抽出してくださいlogitude.doubleValue()

于 2012-12-13T14:54:03.513 に答える