Bagaimana kita bisa membulatkan angka ke 10 terdekat di php?
Katakanlah saya punya 23
, kode apa yang akan saya gunakan untuk membulatkannya 30
?
Bagaimana kita bisa membulatkan angka ke 10 terdekat di php?
Katakanlah saya punya 23
, kode apa yang akan saya gunakan untuk membulatkannya 30
?
Jawaban:
floor()
akan turun.
ceil()
akan naik.
round()
akan pergi ke terdekat secara default.
Bagi dengan 10, lakukan plafon, lalu kalikan dengan 10 untuk mengurangi angka signifikan.
$number = ceil($input / 10) * 10;
Sunting: Saya telah melakukannya dengan cara ini begitu lama .. tetapi jawaban TallGreenTree lebih bersih.
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
Ini akan membulatkan $ number ke angka terdekat 10. Anda juga dapat meneruskan variabel ketiga jika perlu untuk mengubah mode pembulatan.
Info lebih lanjut di sini: http://php.net/manual/en/function.round.php
23
akan 20
dan bukan 30
karena itu akan selalu rond ke 10. terdekat Mode pembulatan tidak akan membantu, karena ini hanya babak setengah, setelah x.
.
Saya sebenarnya mencari fungsi yang bisa dibulatkan ke variabel terdekat, dan halaman ini terus muncul dalam pencarian saya. Jadi ketika saya akhirnya menulis sendiri fungsi tersebut, saya pikir saya akan mempostingnya di sini agar orang lain dapat menemukannya.
Fungsi tersebut akan membulatkan ke variabel terdekat:
function roundToTheNearestAnything($value, $roundTo)
{
$mod = $value%$roundTo;
return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}
Kode ini:
echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';
Akan menghasilkan:
1230
1235
1230
1169
Ada banyak jawaban untuk pertanyaan ini, mungkin semua akan memberikan jawaban yang Anda cari. Tapi seperti yang disebutkan @TallGreenTree, ada fungsi untuk ini.
Tetapi masalah dari jawaban @TallGreenTree adalah tidak membulatkan, itu membulatkan ke 10 terdekat. Untuk mengatasi ini, tambahkan +5
nomor Anda untuk membulatkan. Jika Anda ingin membulatkan ke bawah, lakukan -5
.
Jadi dalam kode:
round($num + 5, -1);
Anda tidak dapat menggunakan round mode
untuk pembulatan, karena itu hanya membulatkan pecahan dan bukan bilangan bulat.
Jika Anda ingin membulatkan ke yang terdekat 100
, Anda harus menggunakan +50
.
div dengan 10 lalu gunakan ceil lalu mult dengan 10
Mencoba
round(23, -1);
Kita bisa "curang" melalui ronde dengan
$rounded = round($roundee / 10) * 10;
Kita juga bisa menghindari pembagian floating point dengan
function roundToTen($roundee)
{
$r = $roundee % 10;
return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}
Sunting: Saya tidak tahu (dan tidak terdokumentasi dengan baik di situs) yang round
sekarang mendukung presisi "negatif", sehingga Anda dapat lebih mudah menggunakan
$round = round($roundee, -1);
Edit lagi: Jika Anda selalu ingin membulatkan, Anda dapat mencoba
function roundUpToTen($roundee)
{
$r = $roundee % 10;
if ($r == 0)
return $roundee;
return $roundee + 10 - $r;
}
Saya ingin membulatkan ke angka berikutnya di tempat digit terbesar (apakah ada nama untuk itu?), Jadi saya membuat fungsi berikut (dalam 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
Ini dapat dengan mudah dilakukan dengan menggunakan fungsi PHP ' fmod '. Kode di bawah ini khusus untuk 10 tetapi Anda dapat mengubahnya menjadi nomor apa pun.
$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;
OUTPUT: 100
Coba ini ... berikan angka yang akan dibulatkan dan itu akan dibulatkan ke persepuluhan terdekat. Semoga membantu ....
bulat ($ num, 1);