无法比较Hashmap和Edittext的双精度值

时间:2014-07-24 09:39:57

标签: java android hashmap double

我在尝试比较两个double值时遇到问题(hashmap中的一个值和Edittext中的一个值)...没有错误,但同时结果是错误的。

宣布3个变种:

    double a,b,c; 
a=Double.parseDouble(Value1.getText().toString());
b=Double.parseDouble(Value2.getText().toString());
c=Double.parseDouble(Value3.getText().toString());

现在声明Hashmap,因为hashmap不采用原始类型,因此声明如下。

HashMap<String, Double> StoreDatabasevalues =new HashMap<String, Double>();
StoreDatabasevalues.put("a",a1); //a1,a2,a3 are from database
StoreDatabasevalues.put("b",a2);
StoreDatabasevalues.put("c",a3);

尝试1:

if(a==StoreDatabasevalues.get("a") || b==StoreDatabasevalues.get("b") || c==StoreDatabasevalues.get("c")){
//mycode here
}
else if (a!=StoreDatabasevalues.get("a") || b!=StoreDatabasevalues.get("b") || c!=StoreDatabasevalues.get("c")){
//mycode here
}

这导致失败,好像值不同,控件不会else if部分。

尝试2:因为我没有在HashMap尝试下面的方法中使用原始类型。

if(StoreDatabasevalues.get("a").equals(a) || StoreDatabasevalues.get("b").equals(b) || StoreDatabasevalues.get("c").equals(c)){
    //mycode here
    }
    else if (!StoreDatabasevalues.get("a").equals(a) || !StoreDatabasevalues.get("b").equals(b) || !StoreDatabasevalues.get("c").equals(c)){
    //mycode here
    }

这次尝试也失败了,因为我提供了不同的值,但控件不会else if部分。

苦苦挣扎了2天......

专家请帮助我克服这一点。

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

据我所知,你无法比较两个浮点值,双值。您可以将它们与0进行比较。尝试此方法。如果d1在数值上等于d2,则此方法返回值0;如果d1在数值上小于d2,则小于0的值;如果d1在数值上大于d2,则值大于0.

     // compares the two specified double values
     double d1 = 15.45;
     double d2 = 11.50;
     int retval = Double.compare(d1, d2);

     if(retval > 0) {
        System.out.println("d1 is greater than d2");
     }
     else if(retval < 0) {
        System.out.println("d1 is less than d2");
     }
     else {
        System.out.println("d1 is equal to d2");
     }

或尝试类似的比较:

if(a-StoreDatabasevalues.get("a")<0.00001 || b-StoreDatabasevalues.get("b")<0.00001 || c-StoreDatabasevalues.get("c")<0.00001){
//do something
}
else if(Math.abs(a-StoreDatabasevalues.get("a"))>0.00001 || Math.abs(b-StoreDatabasevalues.get("b"))>0.00001 || Math.abs(c-StoreDatabasevalues.get("c"))>0.00001){
//do something
}

或尝试使字符串加倍:

if(Double.parseDouble(StoreDatabasevalues.get("a")).equals(a) || Double.parseDouble(StoreDatabasevalues.get("b")).equals(b) || Double.parseDouble(StoreDatabasevalues.get("c")).equals(c)){
    //mycode here
    }
    else if (!Double.parseDouble(StoreDatabasevalues.get("a")).equals(a) || !Double.parseDouble(StoreDatabasevalues.get("b")).equals(b) || !Double.parseDouble(StoreDatabasevalues.get("c")).equals(c)){
    //mycode here
    }

答案 1 :(得分:1)

if(a==StoreDatabasevalues.get("a") ||
   b==StoreDatabasevalues.get("b") ||
   c==StoreDatabasevalues.get("c")){
    //mycode 1 here
}
else if (a!=StoreDatabasevalues.get("a") ||
         b!=StoreDatabasevalues.get("b") ||             
         c!=StoreDatabasevalues.get("c")){
   //mycode 2 here
}

引用:&#34;这导致失败,好像值是不同的控件如果不是其他部分。&#34;

如此:如果三个值中的至少一个 a,b,c匹配,则控制将返回&#34; mycode 1&#34;。

使用此:

if(a==StoreDatabasevalues.get("a") &&
   b==StoreDatabasevalues.get("b") &&
   c==StoreDatabasevalues.get("c")){
    //mycode 1 here - all three values are the same.
}
else /*** if (a!=StoreDatabasevalues.get("a") ||
              b!=StoreDatabasevalues.get("b") ||             
             c!=StoreDatabasevalues.get("c"))   ***/ {
   //mycode 2 here
}

seocnd条件现在是多余的,是第一个的否定。