Android 为什么EditText的Double.parseDouble和返回的值略有不同?
我有以下代码:Android 为什么EditText的Double.parseDouble和返回的值略有不同?,android,Android,我有以下代码: try { Ciocco_V.tot = Double.parseDouble(Et444Tot.getText().toString()); } catch (NumberFormatException e) { e.printStackTrace(); } try { Ciocco_V.burro = Double.parseDouble(Et111Burro.getText().toString()); } catch (NumberFormat
try {
Ciocco_V.tot = Double.parseDouble(Et444Tot.getText().toString());
} catch (NumberFormatException e) {
e.printStackTrace();
}
try {
Ciocco_V.burro = Double.parseDouble(Et111Burro.getText().toString());
} catch (NumberFormatException e) {
e.printStackTrace();
}
try {
Ciocco_V.fibra = Double.parseDouble(Et222Fibra.getText().toString());
} catch (NumberFormatException e) {
e.printStackTrace();
}
在edittex中有以下号码:
44.2(毛驴)和40.6(纤维)84.8(tot)
如果我检查条件Ciocco_V.burro+Ciocco_V.fibra返回此值:
84.80000000000001
如果我失败了。。。。
为什么?这是因为浮点精度。比较这两种方法更好:
if (((Ciocco_V.burro + Ciocco_V.fibra) - Ciocco_V.tot) > 0.00000001 ){
//fail condition
}else{
// correct
}
如果你做一点调查,你会发现:
这个问题以前被问过很多次 您可以使用
Double.compare(d1,d2)
来比较这两个值:
int retval = Double.compare(Ciocco_V.burro + Ciocco_V.fibra, Ciocco_V.tot);
if (retval != 0) {
}
它回来了
如果d1在数值上等于d2,则值为0;小于0的值,如果
d1在数值上小于d2;如果d1为,则该值大于0
数值上大于d2
这与我的If失败相同,可能是因为这两个值的总和为您提供了总数,您正在检查!=当您应该检查==这在这个contidion((Ciocco_V.burro+Ciocco_V.fibra)-Ciocco_V.tot)>0.00000001)中太过合适时,返回值是:1.42108547152002004e-14,我修改了if条件如下:if((Math.abs((Ciocco_V.burro+Ciocco_V.fibra)-Ciocco_V.tot)>0.00000001)这很有效。是的,我的答案没有经过测试。很高兴它有帮助
int retval = Double.compare(Ciocco_V.burro + Ciocco_V.fibra, Ciocco_V.tot);
if (retval != 0) {
}