我想计算两个双值之间的差异
例如:lat1 = 12.2345673,lat2 = 12.2345672。在这里我想要结果为0.0000001。在eclipse中计算double res = Double.compare(lat1,lat2)时,我没有得到这么多。它显示0.0。 请指定确切的公式来克服这个
答案 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。