Agar adil, dalam judul, ia mengatakan "round up nomor untuk terdekat 10", meskipun teks mengatakan "round off" ... aku cukup yakin dia meminta untuk selalu putaran sampai ke berikutnya 10.
Jawaban TallGreenTree tidak selalu membulatkannya. Jawaban ini paling benar dengan penggunaan ceil ()
Brandon
1
Jawaban TallGreenTree mendukung pembulatan ke atas / bawah menggunakan parameter ketiga (mode) round (). round ($ input, -1, PHP_ROUND_HALF_UP)
Daren Schwenke
4
@DarenSchwenke, parameter ketiga itu tidak berfungsi seperti yang Anda asumsikan, yang hanya mengontrol kasus tepat di tengah-tengah antara interval. (15,-1, PHP_ROUND_HALF_UP); // 20,(14,-1, PHP_ROUND_HALF_UP); // 10
Arth
168
round($number,-1);
Ini akan membulatkan $ number ke angka terdekat 10. Anda juga dapat meneruskan variabel ketiga jika perlu untuk mengubah mode pembulatan.
Dapatkah Anda menyalahkan mereka karena berasumsi bahwa penanya bermaksud "bulat ke 10 terdekat" ketika pertanyaannya mengatakan "bulat ke 10 terdekat" dua kali?
ceejayoz
Jawaban ini telah diposting sebelum penanya mengklarifikasi dirinya sendiri. Saya hanya berpikir dia tidak membulatkan dengan benar dalam pertanyaan.
Will Barrett
12
TallGreenTree benar. Anda dapat mengatur mode pembulatan dengan argumen ke-3: "mode One of PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, atau PHP_ROUND_HALF_ODD."
d -_- b
13
Ini tidak memberikan hasil yang benar. 23akan 20dan bukan 30karena itu akan selalu rond ke 10. terdekat Mode pembulatan tidak akan membantu, karena ini hanya babak setengah, setelah x..
Timo002
1
Sayangnya ceil () dan floor () belum memiliki parameter presisi.
squarecandy
15
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);}
Kenny, kamu yang terbaik. Saya hanya berharap saya memiliki representasi grafis tentang bagaimana putarannya persis jadi saya yakin itu memberikan hasil yang diharapkan dalam 100% kasus. Saya kira saya harus melakukan beberapa pengujian.
Alph.Dev
Apakah ada cara untuk mengubah kode ini untuk menambahkan parameter ketiga dengan mode bulat HALF_UP / HALF_DOWN?
Alph.Dev
12
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 +5nomor Anda untuk membulatkan. Jika Anda ingin membulatkan ke bawah, lakukan -5.
Jadi dalam kode:
round($num +5,-1);
Anda tidak dapat menggunakan round modeuntuk pembulatan, karena itu hanya membulatkan pecahan dan bukan bilangan bulat.
Jika Anda ingin membulatkan ke yang terdekat 100, Anda harus menggunakan +50.
Sunting: Saya tidak tahu (dan tidak terdokumentasi dengan baik di situs) yang roundsekarang mendukung presisi "negatif", sehingga Anda dapat lebih mudah menggunakan
$round = round($roundee,-1);
Edit lagi: Jika Anda selalu ingin membulatkan, Anda dapat mencoba
Dorongan pertama saya adalah ke google untuk "php math" dan saya menemukan bahwa ada fungsi pustaka matematika inti yang disebut "round ()" yang kemungkinan besar adalah yang Anda inginkan.
Untuk orang yang ingin melakukannya dengan SQL mentah, tanpa menggunakan php, java, python dll.
SET SQL_SAFE_UPDATES = 0;
UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';
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 graphfunction 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 functionfunction 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.
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.
Sunting: Saya telah melakukannya dengan cara ini begitu lama .. tetapi jawaban TallGreenTree lebih bersih.
sumber
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
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
sumber
23
akan20
dan bukan30
karena itu akan selalu rond ke 10. terdekat Mode pembulatan tidak akan membantu, karena ini hanya babak setengah, setelahx.
.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:
Kode ini:
Akan menghasilkan:
sumber
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:
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
.sumber
div dengan 10 lalu gunakan ceil lalu mult dengan 10
http://php.net/manual/en/function.ceil.php
sumber
Mencoba
round(23, -1);
sumber
Kita bisa "curang" melalui ronde dengan
Kita juga bisa menghindari pembagian floating point dengan
Sunting: Saya tidak tahu (dan tidak terdokumentasi dengan baik di situs) yang
round
sekarang mendukung presisi "negatif", sehingga Anda dapat lebih mudah menggunakanEdit lagi: Jika Anda selalu ingin membulatkan, Anda dapat mencoba
sumber
sumber
Coba ini:
sumber
Dorongan pertama saya adalah ke google untuk "php math" dan saya menemukan bahwa ada fungsi pustaka matematika inti yang disebut "round ()" yang kemungkinan besar adalah yang Anda inginkan.
sumber
Untuk orang yang ingin melakukannya dengan SQL mentah, tanpa menggunakan php, java, python dll.
SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';
sumber
Saya ingin membulatkan ke angka berikutnya di tempat digit terbesar (apakah ada nama untuk itu?), Jadi saya membuat fungsi berikut (dalam php):
sumber
sumber
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.
OUTPUT: 100
sumber
ke terdekat 10, harus seperti di bawah ini
sumber
Coba ini ... berikan angka yang akan dibulatkan dan itu akan dibulatkan ke persepuluhan terdekat. Semoga membantu ....
bulat ($ num, 1);
sumber