有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我在网上找不到相关的问题,所以我也找不到答案

我所能找到的就是,如何比较两个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) 个答案

  1. # 1 楼答案

    int returnVal = Double.compare(d1, d2);     
    boolean lessThanOrEqual = returnVal <= 0;
    
  2. # 2 楼答案

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

    这会满足您的需要并返回:

    如果d1在数值上等于d2,则值为0;如果d1在数值上小于d2,则值小于0;如果d1在数值上大于d2,则该值大于0

  3. # 3 楼答案

    请尝试使用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

  4. # 4 楼答案

    这需要一些修正,这里有死代码:

    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的括号,则更容易遵循逻辑并理解每种情况下发生的情况

  5. # 5 楼答案

    那么:

    double d1 = 1.0;
    double d2 = 2.0;
    if (d1 <= d2) {
       System.out.println(d1 + " is lesser than " + d2);
    }
    

    这适用于Double:编译器将根据需要执行box/unbox操作。当然你也可以用另一种方式

    if (d2 >= d1) {
       System.out.println(d1 + " is lesser than " + d2);
    }
    
  6. # 6 楼答案

    这就行了

    // 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