我有两个double
值,我想通过比较两个值来检查等于或大于和等于或小于。
我已经在互联网上搜索并阅读了其他相关的SO问题,但无法找到解决方案。
我能找到的是,如何比较两个double
值,
int returnVal = Double.compare(d1, d2);
但我如何查看d1 <= d2
和d1 >= d2
?
修改
double remRangeInKm;
if (remRange == 200 || remRange == 500){
if (remRange == 200) remRangeInKm = 0.2;
else remRangeInKm = 0.5;
}
else remRangeInKm = remRange * 1.0;
int earthRadius = 6371; //in km
double distance = Math.abs(Math.acos(Math.sin(remLatitude)*Math.sin(currentLatitude)
+ Math.cos(remLatitude)*Math.cos(currentLatitude)
* Math.cos(currentLongitude - remLongitude)) * earthRadius);
Log.d("Distance after formula", String.valueOf(distance));
if (distance <= remRangeInKm){
triggerNotification();
}
距离为91.482605 meters
,remRangeInKm为200 meters
,即使它未执行if
语句。
答案 0 :(得分:3)
这样就可以了。
// true if d1 is equal or smaller than d2
Double.compare(d1, d2) <= 0
// true if d1 is equal or larger than d2
Double.compare(d1, d2) >= 0
答案 1 :(得分:2)
int returnVal = Double.compare(d1, d2);
这可以满足您的需求并返回:
如果d1在数值上等于d2,则值为0;如果d1在数值上小于d2,则小于0的值;如果d1在数值上大于d2,则值大于0.
答案 2 :(得分:1)
怎么样:
double d1 = 1.0;
double d2 = 2.0;
if (d1 <= d2) {
System.out.println(d1 + " is lesser than " + d2);
}
这适用于Double
:编译器将根据需要进行装箱/取消装箱。当然你可以用另一种方式做到这一点......
if (d2 >= d1) {
System.out.println(d1 + " is lesser than " + d2);
}
答案 3 :(得分:0)
int returnVal = Double.compare(d1, d2);
boolean lessThanOrEqual = returnVal <= 0;
答案 4 :(得分:0)
尝试使用BigDecimal,如下例所示。
import java.math.BigDecimal; BigDecimal premium = BigDecimal.valueOf(1586.6d); BigDecimal netToCompany = BigDecimal.valueOf(708.75d); BigDecimal commission = premium.subtract(netToCompany); System.out.println(commission + " = " + premium + " - " + netToCompany);
这会产生以下输出。
877.85 = 1586.6 - 708.75
答案 5 :(得分:0)
这需要一些修复,这里有死代码:
double remRangeInKm;
if (remRange == 200 || remRange == 500){
if (remRange == 200) remRangeInKm = 0.2;
else remRangeInKm = 0.5;
}
else remRangeInKm = remRange * 1.0;
修正:
double remRangeInKm = 0.0;
if (remRange == 200 || remRange == 500) {
if (remRange == 200) {
remRangeInKm = 0.2;
} else {
remRangeInKm = 0.5;
}
} else {
// there was a logic mistake here, needs to be multiplied by 0.001
// not 1.0 to convert from meters to km
// if you have 600m * 1.0 == 600.0km
// should be 600m * 0.001 == 0.6km
remRangeInKm = remRange * 0.001;
}
现在尝试使用此修复程序运行代码。
注意:对if / else使用括号,更容易遵循逻辑并理解每种情况下会发生什么。