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
?
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
?
Câu trả lời:
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.
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
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
23
sẽ có 20
và không 30
bở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.
.
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
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 +5
và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
.
chia cho 10 sau đó sử dụng ceil sau đó mult bởi 10
Thử
round(23, -1);
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) round
hiệ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;
}
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;
}
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
Đ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
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);