准确计算两个双精度值之间的差异

时间:2012-02-02 01:56:51

标签: java android

我想计算两个双值之间的差异

例如:lat1 = 12.2345673,lat2 = 12.2345672。在这里我想要结果为0.0000001。在eclipse中计算double res = Double.compare(lat1,lat2)时,我没有得到这么多。它显示0.0。 请指定确切的公式来克服这个

5 个答案:

答案 0 :(得分:4)

可以尝试以下代码吗,

     double lat1=12.2345673;
     double lat2=12.2345672;
     double dif=lat1-lat2;

     DecimalFormat df = new DecimalFormat("###.#######");
     System.out.println("Diff Val  : "+df.format(dif));

输出: Diff Val:0.0000001

答案 1 :(得分:1)

您可以使用以下方法计算两个纬度点之间的距离。

/**
 * 
 * @param lat1 Latitude of the First Location
 * @param lng1 Logitude of the First Location
 * @param lat2 Latitude of the Second Location
 * @param lng2 Longitude of the Second Location
 * @return distance between two lat-lon in float format
 */

public static float distFrom (float lat1, float lng1, float lat2, float lng2 ) 
{
    double earthRadius = 3958.75;
    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
    Math.sin(dLng/2) * Math.sin(dLng/2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    double dist = earthRadius * c;

    int meterConversion = 1609;

    return new Float(dist * meterConversion).floatValue();
}

答案 2 :(得分:1)

将两个数字乘以1000万,然后减去,然后除以相同将是一个解决方案。

把它变成一个int。

答案 3 :(得分:1)

当我使用Lat / Long值时,我通常使用1E6精度并存储为int。 我从Google的Android Map库中的GeoPoint类中学习了这种模式。

看起来你需要的不仅仅是1E6,所以你可能想要使用更高的准确度并使用长。

答案 4 :(得分:0)

使用BigDecimal