四舍五入数字


Rounding numbers

我的问题是如何将下面脚本的输出四舍五入以显示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;
}