如何检查两个double值中较大和较小的值?

时间:2015-03-18 19:44:05

标签: java

我有两个double值,我想通过比较两个值来检查等于或大于等于或小于

我已经在互联网上搜索并阅读了其他相关的SO问题,但无法找到解决方案。

我能找到的是,如何比较两个double值,

     int returnVal = Double.compare(d1, d2);

但我如何查看d1 <= d2d1 >= 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语句。

6 个答案:

答案 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

可能重复:How to resolve a Java Rounding Double issue

答案 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使用括号,更容易遵循逻辑并理解每种情况下会发生什么。