숫자를 가장 가까운 10으로 반올림하는 방법은 무엇입니까?


99

PHP에서 가장 가까운 10으로 숫자를 반올림하려면 어떻게해야합니까?

내가 가지고 있다고 말하면 23어떤 코드를 사용하여 반올림 30합니까?


51
어, 그게 가장 가까운 10 이 아니야 ?
Rowland Shaw

1
좋아요, 1 개의 유효 숫자로 반올림하세요! haha
tarnfeld

3
공정하게, 제목, 그것은 "라운드라고 까지 텍스트가"라운드 오프 "라고하더라도, 다수 가까운 10"... 나는 확신 그는 항상 라운드 묻는 데요있어 최대 받는 사람 옆에 (10)
아론 Wallentine

1
10의 거듭 제곱으로 반올림, stackoverflow.com/q/43932648/6521116
Kris Roofe

답변:


219

floor() 내려갑니다.

ceil() 올라갈 것입니다.

round() 기본적으로 가장 가까운 곳으로 이동합니다.

10으로 나누고 셀을 수행 한 다음 10을 곱하여 유효 숫자를 줄입니다.

$number = ceil($input / 10) * 10;

편집 : 나는 오랫동안 이렇게 해왔지만 TallGreenTree의 대답은 더 깨끗합니다.


4
TallGreenTree의 대답이 항상 반올림하지는 않습니다. 이 대답은 ceil ()을 사용했을 때 가장 정확합니다
Brandon

1
TallGreenTree의 답변은 round ()의 세 번째 매개 변수 (모드)를 사용하여 반올림 / 내림을 지원합니다. round ($ input, -1, PHP_ROUND_HALF_UP)
Daren Schwenke

4
@DarenSchwenke, 그 세 번째 매개 변수는 당신이 가정 한 것처럼 작동하지 않으며 간격 사이의 정확히 중간의 경우 만 제어합니다. (15,-1, PHP_ROUND_HALF_UP); // 20,(14,-1, PHP_ROUND_HALF_UP); // 10
Arth

168
round($number, -1);

이것은 $ number를 가장 가까운 10으로 반올림합니다. 반올림 모드를 변경하기 위해 필요한 경우 세 번째 변수를 전달할 수도 있습니다.

여기에 더 많은 정보 : http://php.net/manual/en/function.round.php


11
질문이 "가장 가까운 10으로 반올림"이라고 두 번 말했을 때 질문자가 "가장 가까운 10으로 반올림"을 의미한다고 가정 한 것에 대해 비난 할 수 있습니까?
ceejayoz

이 답변은 질문자가 자신을 명확히하기 전에 게시되었습니다. 나는 그가 질문에서 올바로 반올림하지 않는다고 생각했습니다.
Will Barrett

12
TallGreenTree가 정확합니다. 당신은 세번째 인수로 반올림 모드를 설정할 수 있습니다 : "모드 PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, 또는 PHP_ROUND_HALF_ODD 중 하나입니다."
D를 -_- b를

13
이것은 올바른 결과를 제공하지 않습니다. 2320이 아니라 30그것은 항상 가장 가까운 10 둥근 모드하지 않습니다 도움이 단지 라운드 반 이후, 이후에 ROND 때문 x..
Timo002 2014-06-16

1
ceil () 및 floor ()에는 아직 precision 매개 변수가 없습니다.
squarecandy

15

실제로 가장 가까운 변수로 반올림 할 수있는 함수를 찾고 있었는데이 페이지가 계속 검색되었습니다. 그래서 마침내 직접 함수를 작성하게되었을 때 다른 사람들이 찾을 수 있도록 여기에 게시 할 것이라고 생각했습니다.

함수는 가장 가까운 변수로 반올림됩니다.

function roundToTheNearestAnything($value, $roundTo)
{
    $mod = $value%$roundTo;
    return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}

이 코드 :

echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';

다음을 출력합니다.

1230
1235
1230
1169

케니, 당신은 최고입니다. 나는 그것이 정확히 어떻게 반올림되는지 그래픽으로 표현하기를 원하므로 100 %의 경우 예상 결과를 제공한다고 확신합니다. 테스트를 좀해야 할 것 같아요.
Alph.Dev

이 코드를 수정하여 반올림 모드 HALF_UP / HALF_DOWN으로 세 번째 매개 변수를 추가하는 방법이 있습니까?
Alph.Dev

12

이 질문에는 많은 답변이 있으며 아마도 모두가 당신이 찾고있는 답을 줄 것입니다. 그러나 @TallGreenTree가 언급했듯이 이에 대한 기능이 있습니다.

그러나 @TallGreenTree의 대답의 문제는 반올림하지 않고 가장 가까운 10으로 반올림한다는 것입니다.이 문제를 해결하려면 반올림하기 위해 +5숫자를 더하십시오. 반올림하려면 -5.

따라서 코드에서 :

round($num + 5, -1);

round mode반올림에는를 사용할 수 없습니다 . 왜냐하면 정수가 아닌 분수 만 반올림하기 때문입니다.

가장 가까운 값으로 반올림 100하려면 사용하십시오 +50.


10 진수가 아닌 숫자에는 작동하지 않습니다. 10은 20이됩니다
Luciano



2

라운드를 통해 "속임수"를 사용할 수 있습니다.

$rounded = round($roundee / 10) * 10;

부동 소수점 나누기를 피할 수도 있습니다.

function roundToTen($roundee)
{
  $r = $roundee % 10;
  return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}

편집 : round이제 "음수"정밀도를 지원 하는 것을 몰랐습니다 (사이트에 잘 문서화되어 있지 않음) . 따라서 더 쉽게 사용할 수 있습니다.

$round = round($roundee, -1);

다시 편집 : 항상 반올림하려면 시도 할 수 있습니다.

function roundUpToTen($roundee)
{
  $r = $roundee % 10;
  if ($r == 0)
    return $roundee;
  return $roundee + 10 - $r;    
}

안녕하세요, 이것은 완벽하게 작동합니다-그 질문에 대해 어떻게 반올림 할 수 있습니까? 23 ~ 30 세?
tarnfeld

2
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30


0

나의 첫 번째 충동은 "php math"를 위해 구글에 갔고 "round ()"라는 핵심 수학 라이브러리 함수가 있다는 것을 발견했습니다.


0

php, java, python 등을 사용하지 않고 원시 SQL로 수행하려는 사람들을 위해. SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';


0

나는 가장 큰 자리의 다음 숫자로 반올림하고 싶었으므로 (그 이름이 있습니까?) 다음 함수를 만들었습니다 (php).

//Get the max value to use in a graph scale axis, 
//given the max value in the graph
function getMaxScale($maxVal) {
    $maxInt = ceil($maxVal);
    $numDigits = strlen((string)$maxInt)-1; //this makes 2150->3000 instead of 10000
    $dividend = pow(10,$numDigits);
    $maxScale= ceil($maxInt/ $dividend) * $dividend;
    return $maxScale;
}

0
Hey i modify Kenny answer and custom it not always round function now it can be ceil and floor function

function roundToTheNearestAnything($value, $roundTo,$type='round')
    {
        $mod = $value%$roundTo;
        if($type=='round'){
            return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
        }elseif($type=='floor'){
            return $value+($mod<($roundTo/2)?-$mod:-$mod);
        }elseif($type=='ceil'){
            return $value+($mod<($roundTo/2)?$roundTo-$mod:$roundTo-$mod);
        }

    }

echo roundToTheNearestAnything(1872,25,'floor'); // 1850<br>
echo roundToTheNearestAnything(1872,25,'ceil'); // 1875<br>
echo roundToTheNearestAnything(1872,25,'round'); // 1875

0

이것은 PHP ' fmod '함수를 사용하여 쉽게 수행 할 수 있습니다 . 아래 코드는 10에만 해당되지만 임의의 숫자로 변경할 수 있습니다.

$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;

출력 : 100


0

가장 가까운 10까지, 다음과 같아야합니다.

$number = ceil($input * 0.1)/0.1 ;

-2

반올림 할 숫자를 입력하면 가장 가까운 10 분의 1로 반올림됩니다.

round ($ num, 1);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.