2009-10-24 70 views
68

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

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

+44

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

+1

ok, làm tròn tới 1 con số đáng kể rồi! haha – tarnfeld

+1

Để công bằng, trong tiêu đề, nó nói "tròn * lên * một số đến gần 10", mặc dù văn bản nói "làm tròn" ... Tôi khá chắc chắn rằng anh ấy luôn yêu cầu luôn * tròn * thành các * tiếp theo * 10. –

Trả lời

143

floor() sẽ ngừng hoạt động.

ceil() sẽ tăng lên.

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

Chia cho 10, thực hiện lệnh, 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 đã thực hiện theo cách này quá lâu .. nhưng câu trả lời của TallGreenTree rõ ràng hơn.

+0

ceil - hoạt động: D !!! – tarnfeld

+1

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

+0

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

2

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

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

Chúng tôi cũng có thể tránh đi qua bộ phận dấu chấm độ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à tài liệu này không được ghi rõ trên si te) mà round bây giờ hỗ trợ "tiêu cực" chính xác, vì vậy bạn có thể dễ dàng sử dụng

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

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

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

hi, điều này hoạt động hoàn hảo - cho câu hỏi đó, làm thế nào tôi có thể vòng UP? 23 đến 30? – tarnfeld

131
round($number, -1); 

chí này làm tròn số $ đến số gần nhất 10. Bạn cũng có thể chuyển một biến thứ ba nếu cần thiết để thay đổi chế độ làm tròn. Thông tin

More đây: http://php.net/manual/en/function.round.php

+1

vòng không phải là những gì anh ta muốn –

+9

Bạn có thể đổ lỗi cho họ cho giả định người hỏi có nghĩa là "vòng đến gần 10" khi câu hỏi cho biết "vòng đến gần 10" hai lần? – ceejayoz

+0

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

2

Hãy thử

round(23, -1);

0

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

1

Hãy thử điều này:

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

Chỉ cần làm tròn xuống đến gần 10, và sau đó thêm 10.

round($num, -1) + 10 
+0

điều này sẽ làm việc cho ví dụ được đăng (23 đến 30) nhưng sẽ dẫn đến 27 được làm tròn thành 40. – squarecandy

6

Có rất nhiều anwers trong câu hỏi này, có lẽ tất cả ý chí cung cấp cho bạn câu trả lời 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 @TallGreenTree là nó không tròn, nó tròn đến gần nhất 10. Để giải quyết điều này, hãy thêm +5 vào số của bạn để làm tròn lên. Nếu bạn muốn làm tròn xuống, hãy -5.

Vì vậy, trong mã:

round($num + 5, -1); 

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

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

+0

Đây là câu trả lời đúng nhất! –

9

Tôi đã thực sự 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, khi tôi cuối cùng đã kết thúc viết các chức năng bản thân mình, tôi nghĩ rằng tôi sẽ đăng nó ở đây cho những người khác để tìm.

Các chức năng sẽ tròn vào 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>'; 

Will đầu ra:

1230 
1235 
1230 
1169 
+0

Kenny, bạn là người giỏi nhất. Tôi chỉ ước mình có một đại diện đồ họa về cách nó tròn chính xác vì vậy tôi chắc chắn nó mang lại kết quả mong đợi trong 100% các trường hợp. Tôi đoán tôi sẽ phải làm một số thử nghiệm. –

+0

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

-1

Hãy thử điều này ...... vượt qua trong số để được làm tròn và nó sẽ làm tròn đến số mười gần nhất. elps ....

vòng ($ num, 1);

0

Đối với những người muốn làm điều đó với SQL liệu, mà không sử dụng php, java, python, vv 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 lên đến số tiếp theo ở vị trí chữ số lớn nhất (là có một tên cho đó?), vì vậy tôi đã thực hiện chức năng 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; 
} 
Các vấn đề liên quan