PHP上的减法返回0

时间:2014-10-15 09:46:52

标签: php rounding

我在PHP中有一个函数,用于计算参数中经度和纬度的距​​离。

//Convert to kilometers
function distance($lat1, $lon1, $lat2, $lon2, $unit) 
{
  $theta = $lon1 - $lon2; //$lon1 = 1.451785000 and $lon 2 = 1.451628000 (should return -0.000157)
  echo $theta; //Display "0" instead of "-0.000157"

  $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;
  }
}

问题是$ theta返回0而不是实际结果-0.000157。

我认为这是因为PHP假设这个数字太小,所以它将它舍入为0。

是否有避免这种情况的功能?

2 个答案:

答案 0 :(得分:0)

我认为ini_set('precision', 17)正是您所寻找的。

答案 1 :(得分:0)

我找到了解决问题的方法!

我必须使用以下代码:

bcsub($lon1, $lon2, 10);

它减去2个数字并设置结果中小数位后面的位数(这里是10)。