我在尝试比较两个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天......
专家请帮助我克服这一点。
感谢您的时间。
答案 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条件现在是多余的,是第一个的否定。