我有这个代码来找到两组GPS坐标之间的距离,我从网上的其他地方得到了代码。
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
返回的输出如下:25.44049但如果我这样做
$distance_output = distance(-50.12345, 100.1235,-60.12345,120.12345,'km');
echo $distance_output . '<br />;
echo $distance_output - 15.12345;
输出如下:
15.12345
1.23639038e10
这些只是组成数字,但你可以看到distance()的输出看起来像一个数字,但是当我从中减去相同的数字时,它会吐出一个奇怪的指数数字。有什么想法吗?
非常感谢
答案 0 :(得分:0)
答案 1 :(得分:0)
我尝试了你的代码(你只是错过了一个简单的引用),输出是1042.1216629565和1026.9982129565,对我来说似乎没问题。
如果我将1042.1216629565减去1042.1216629565,则输出变为3.092281986028E-11:注意e 后的减去字符。
此数字等于0.00000000003092281986028,而不是零。这种差异在浮点计算中很常见。它可以通过舍入值二进制编码中的错误来解释。
请参阅维基百科:http://en.wikipedia.org/wiki/Floating_point,特别是关于四舍五入的部分。
如果要显示结果,请使用number_format()
如果你想比较两个浮点值,你必须使用类似的东西:
$epsilon = 1e-6;
if (abs($value1-$value2) <= $epsilon){
}