2012-03-09 30 views
-2

我的問題是我將如何捨棄下面的腳本的輸出來顯示107.4而不是107.44613075316我發現了PHP函數,但我不知道如何實現它。舍入數

///// Get the two locations from the url 

$lat1 = $_GET[lat1]; 
$lon1 = $_GET[lon1]; 

$lat2 = $_GET[lat2]; 
$lon2 = $_GET[lon2]; 


//////calculate the distance 

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

// Miles 
echo distance($lat1, $lon1, $lat2, $lon2, "m") . " miles<br><br>"; 

//Kilometers 
echo distance($lat1, $lon1, $lat2, $lon2, "k") . " kilometers<br><br>"; 

//Nautical miles 
echo distance($lat1, $lon1, $lat2, $lon2, "N") . " Nautical miles"; 
+2

請閱讀手冊:http://php.net/round,甚至有給定的例子。 – hakre 2012-03-09 00:21:58

回答

0

PHP手冊是如何使用圓形()方法很清楚。

最簡單的方法來自動把它就會成爲你的距離函數中,雖然這是值得商榷的,你想從這個方法完全精確。如果你不這樣做,然後用下面這將自動輪輸出:

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); 

    $output = $miles; 
    if ($unit == "K") { 
     $output = $miles * 1.609344; 
    } else if ($unit == "N") { 
     $output = $miles * 0.8684; 
    } 
    return round($output, 1); 
} 
+0

感謝@rudi_visser工作。我發現的唯一問題是括號:$ output = $ miles * 1.609344);但是在我移除它之後,它像魅力一樣工作。再次感謝。 – 2012-03-09 00:40:26

+0

@JustinPetty很好:)更新了答案,沒有錯誤,對此深表歉意。 – 2012-03-09 00:41:19

+0

我不會推薦這個選項。這會導致每次調用'distance()'來調整結果,如果您需要其他代碼點中更精確的值,該怎麼辦?也許添加一個精確標誌。 – 2012-03-09 01:19:47

0
<?php round(107.44613075316, 1); ?> 

應該這樣做。您可以使用:

舉例來說,在模式和圓形的更多信息:

http://us2.php.net/round

0

round()

$x=107.44613075316; 
echo(round($x,1) . "\n"); 

輸出,當然,107.4

文檔是你的朋友:閱讀它。愛它。用它。

2

sprintf是這裏的通用修復。

要打印浮點數1位小數的精度進行顯示,例如:

sprintf("%2.1f miles <br /><br />", $distance); 
0

回合值x精度p,其中0 < p <無限的。 (f.ex. 0.25,0.5%,1,2,...)

PHP
function RoundTo(float $x, float $p) 
{ 
    $y = 1/$p; 
    return intval(($x+(1/($y+$y)))*$y)/$y; 
} 

function RoundUp(float $x, float $p) 
{ 
    $y = 1/$p; 
    return intval(($x+(1/$y))*$y)/$y; 
} 

function RoundDown(float $x, float $p) 
{ 
    $y = 1/$p; 
    return intval($x*$y)/$y; 
}