我的问题是如何将下面脚本的输出四舍五入以显示107.4而不是107.44613075516我找到了php round函数,但我不确定如何实现它。
///// 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";
sprintf是这里的通用修复程序。
要打印精度为小数点后1位的浮点数字以供显示,例如:
sprintf("%2.1f miles <br /><br />", $distance);
PHP手册非常清楚如何使用round()方法。
自动四舍五入的最简单方法是在距离函数内,尽管有争议的是,你希望通过这种方法获得完全的精度。。如果你不这样做,那么使用以下方法,它将自动舍入输出:
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);
}
查看number_format()
。
http://php.net/manual/en/function.number-format.php
<?php round(107.44613075316, 1); ?>
应该这样做。你可以使用:
例如,四舍五入。更多关于模式和回合的信息:
http://us2.php.net/round
查看round()
:
$x=107.44613075316;
echo(round($x,1) . "'n");
输出当然是107.4
。
文档是你的朋友:阅读它。喜欢它。使用它。
将值x舍入为精度p,其中0<p<极大的(例如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;
}