Làm thế nào để làm tròn một số đến gần 10 nhất?


99

Làm thế nào chúng ta có thể làm tròn một số đến 10 gần nhất trong php?

Giả sử tôi có 23, tôi sẽ sử dụng mã nào để làm tròn nó thành 30?


51
Er, đó không phải là 10 gần nhất ?
Rowland Shaw

1
được rồi, làm tròn lên 1 con số đáng kể! haha
tarnfeld

3
Để công bằng, trong tiêu đề, nó nói "tròn lên một số để gần 10", mặc dù các văn bản nói "vòng tắt" ... Tôi khá chắc chắn rằng anh ta hỏi luôn tròn lên đến tới 10
Aaron Wallentine

1
làm tròn đến sức mạnh của 10, stackoverflow.com/q/43932648/6521116
Kris Roofe

Câu trả lời:


219

floor() sẽ đi xuống.

ceil() sẽ đi lên.

round() sẽ đi đến gần nhất theo mặc định.

Chia cho 10, làm dấu chấm, sau đó nhân với 10 để giảm các chữ số có nghĩa.

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

Chỉnh sửa: Tôi đã làm theo cách này quá lâu rồi .. nhưng câu trả lời của TallGreenTree rõ ràng hơn.


4
Câu trả lời của TallGreenTree không phải lúc nào cũng làm tròn nó. Câu trả lời này đúng nhất với việc sử dụng ceil ()
Brandon

1
Câu trả lời của TallGreenTree không hỗ trợ làm tròn lên / xuống bằng cách sử dụng tham số (chế độ) thứ ba của round (). vòng ($ input, -1, PHP_ROUND_HALF_UP)
Daren Schwenke,

4
@DarenSchwenke, thông số thứ ba đó không hoàn toàn hoạt động như bạn giả định, chỉ kiểm soát trường hợp chính xác giữa các khoảng thời gian. (15,-1, PHP_ROUND_HALF_UP); // 20,(14,-1, PHP_ROUND_HALF_UP); // 10
Arth

168
round($number, -1);

Điều này sẽ làm tròn số $ thành 10. Bạn cũng có thể chuyển một biến thứ ba nếu cần để thay đổi chế độ làm tròn.

Thông tin thêm tại đây: http://php.net/manual/en/ Chức năng.round.php


11
Bạn có thể trách họ khi cho rằng người hỏi có ý "làm tròn đến 10 gần nhất" khi câu hỏi nói "làm tròn đến 10 gần nhất" hai lần không?
ceejayoz

Câu trả lời này đã được đăng trước khi người hỏi tự làm rõ. Tôi chỉ nghĩ rằng anh ta đã không làm tròn câu hỏi một cách chính xác.
TallGreenTree

12
TallGreenTree là chính xác. Bạn có thể đặt chế độ làm tròn với đối số thứ 3: "mode One of PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, or PHP_ROUND_HALF_ODD."
d -_- b

13
Điều này không cho kết quả đúng. 23sẽ có 20và không 30bởi vì nó sẽ luôn quay đến gần nhất 10. Chế độ làm tròn sẽ không giúp ích gì, vì nửa vòng duy nhất này, sau khi x..
Timo002

1
Đáng buồn là ceil () và floor () chưa có tham số chính xác.
squarecandy

15

Tôi thực sự đang tìm kiếm một hàm có thể làm tròn đến biến gần nhất và trang này tiếp tục xuất hiện trong các tìm kiếm của tôi. Vì vậy, cuối cùng khi tôi tự viết hàm, tôi nghĩ tôi sẽ đăng nó lên đây để người khác tìm.

Hàm sẽ làm tròn đến biến gần nhất:

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

Mã này:

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

Sẽ xuất:

1230
1235
1230
1169

Kenny, bạn là người tốt nhất. Tôi chỉ ước mình có một biểu diễn đồ họa về cách nó làm tròn chính xác để tôi chắc chắn rằng nó cho kết quả mong đợi trong 100% trường hợp. Tôi đoán tôi sẽ phải làm một số thử nghiệm.
Alph.Dev

Có cách nào để sửa đổi mã này để thêm tham số thứ ba với chế độ vòng HALF_UP / HALF_DOWN không?
Alph.Dev

12

Có rất nhiều điều băn khoăn trong câu hỏi này, có lẽ tất cả sẽ cho bạn câu trả lời mà bạn đang tìm kiếm. Nhưng như @TallGreenTree đã đề cập, có một chức năng cho việc này.

Nhưng vấn đề của câu trả lời của @TallGreenTree là nó không làm tròn, nó làm tròn đến 10. Để giải quyết vấn đề này, hãy thêm +5vào số của bạn để làm tròn. Nếu bạn muốn làm tròn, hãy-5 .

Vì vậy, trong mã:

round($num + 5, -1);

Bạn không thể sử dụng round mode để làm tròn, vì nó chỉ làm tròn phân số chứ không phải số nguyên.

Nếu bạn muốn làm tròn đến gần nhất 100, bạn nên sử dụng +50.


Điều này không hoạt động đối với các số không phải số thập phân. 10 trở thành 20
Luciano



2

Chúng ta có thể "ăn gian" qua vòng với

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

Chúng ta cũng có thể tránh trải qua phép phân chia dấu phẩy động với

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

Chỉnh sửa: Tôi không biết (và nó không được ghi chép đầy đủ trên trang web) roundhiện hỗ trợ độ chính xác "tiêu cực", vì vậy bạn có thể dễ dàng sử dụng hơn

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

Chỉnh sửa lại: Nếu bạn luôn muốn làm tròn, bạn có thể thử

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

xin chào, điều này hoạt động hoàn hảo - đối với câu hỏi đó, làm thế nào tôi có thể làm tròn? vậy 23 đến 30?
tarnfeld

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


0

Động lực đầu tiên của tôi là tìm kiếm "php math" trên google và tôi phát hiện ra rằng có một hàm thư viện toán học cốt lõi được gọi là "round ()" có thể là những gì bạn muốn.


0

Đối với những người muốn làm điều đó với SQL thô mà không sử dụng php, java, python, v.v. SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';


0

Tôi muốn làm tròn đến số tiếp theo ở vị trí chữ số lớn nhất (có tên cho nó không?), Vì vậy tôi đã thực hiện hàm sau (trong 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

Điều này có thể dễ dàng thực hiện bằng cách sử dụng hàm ' fmod ' của PHP . Mã bên dưới dành riêng cho 10 nhưng bạn có thể thay đổi nó thành bất kỳ số nào.

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

ĐẦU RA: 100


0

đến 10 gần nhất, phải như dưới đây

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

-2

Hãy thử điều này ...... vượt qua số được làm tròn và nó sẽ làm tròn đến phần mười gần nhất. Rất hữu ích ....

vòng ($ num, 1);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.