เราจะปัดเศษตัวเลขให้เป็น 10 ที่ใกล้ที่สุดใน php ได้อย่างไร?
สมมติว่าฉันมี23
รหัสอะไรฉันจะใช้เพื่อปัดเศษเพื่อ30
?
เราจะปัดเศษตัวเลขให้เป็น 10 ที่ใกล้ที่สุดใน php ได้อย่างไร?
สมมติว่าฉันมี23
รหัสอะไรฉันจะใช้เพื่อปัดเศษเพื่อ30
?
คำตอบ:
floor()
จะลงไป
ceil()
จะขึ้น.
round()
จะไปที่ใกล้ที่สุดโดยค่าเริ่มต้น
หารด้วย 10 ทำ ceil แล้วคูณด้วย 10 เพื่อลดเลขนัยสำคัญ
$number = ceil($input / 10) * 10;
แก้ไข: ฉันทำแบบนี้มานานแล้ว .. แต่คำตอบของ TallGreenTree นั้นสะอาดกว่า
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
ซึ่งจะปัดเศษ $ number ให้ใกล้เคียงที่สุด 10 คุณยังสามารถส่งผ่านตัวแปรที่สามได้หากจำเป็นเพื่อเปลี่ยนโหมดการปัดเศษ
ข้อมูลเพิ่มเติมที่นี่: http://php.net/manual/en/function.round.php
23
จะเป็น20
และไม่ใช่30
เพราะมันจะวิ่งไปใกล้ที่สุด 10 เสมอโหมดการปัดเศษจะไม่ช่วยเนื่องจากรอบนี้เพียงครึ่งเดียวหลังจากที่x.
.
จริงๆแล้วฉันกำลังค้นหาฟังก์ชันที่สามารถปัดเศษเป็นตัวแปรที่ใกล้ที่สุดและหน้านี้ยังคงปรากฏในการค้นหาของฉัน ดังนั้นในที่สุดเมื่อฉันเขียนฟังก์ชันด้วยตัวเองฉันคิดว่าฉันจะโพสต์ไว้ที่นี่เพื่อให้คนอื่นค้นหา
ฟังก์ชันจะปัดเศษเป็นตัวแปรที่ใกล้ที่สุด:
function roundToTheNearestAnything($value, $roundTo)
{
$mod = $value%$roundTo;
return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}
รหัสนี้:
echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';
จะส่งออก:
1230
1235
1230
1169
มีคำถามมากมายในคำถามนี้อาจทั้งหมดจะให้คำตอบที่คุณกำลังมองหา แต่ตามที่ @TallGreenTree กล่าวถึงมีฟังก์ชันนี้
แต่ปัญหาของคำตอบของ @TallGreenTree คือมันไม่ปัดเศษขึ้นมันจะปัดเศษเป็น 10 ที่ใกล้ที่สุดในการแก้ปัญหานี้ให้เพิ่ม+5
หมายเลขของคุณเพื่อปัดเศษขึ้น หากต้องการปัดเศษลงให้ทำ-5
หากคุณต้องการที่จะลงรอบทำ
ดังนั้นในรหัส:
round($num + 5, -1);
คุณไม่สามารถใช้ไฟล์ round mode
สำหรับการปัดเศษได้เนื่องจากจะปัดเศษเศษส่วนเท่านั้นไม่ใช่จำนวนเต็ม
หากคุณต้องการที่จะรอบขึ้นไปที่ใกล้ที่สุด100
คุณ shoud +50
ใช้
หารด้วย 10 แล้วใช้ ceil แล้วคูณด้วย 10
ลอง
round(23, -1);
เราสามารถ "โกง" ผ่านรอบด้วย
$rounded = round($roundee / 10) * 10;
นอกจากนี้เรายังสามารถหลีกเลี่ยงการแบ่งจุดลอยได้ด้วย
function roundToTen($roundee)
{
$r = $roundee % 10;
return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}
แก้ไข: ฉันไม่รู้ (และยังไม่ได้รับการบันทึกไว้อย่างดีในไซต์) ว่าround
ตอนนี้รองรับความแม่นยำ "เชิงลบ" แล้วดังนั้นคุณจึงสามารถใช้
$round = round($roundee, -1);
แก้ไขอีกครั้ง: หากคุณต้องการปัดเศษคุณสามารถลองได้
function roundUpToTen($roundee)
{
$r = $roundee % 10;
if ($r == 0)
return $roundee;
return $roundee + 10 - $r;
}
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30
ลองสิ่งนี้:
ceil($roundee / 10) * 10;
แรงกระตุ้นแรกของฉันคือ Google สำหรับ "php math" และฉันค้นพบว่ามีฟังก์ชันห้องสมุดคณิตศาสตร์หลักที่เรียกว่า "round ()" ซึ่งน่าจะเป็นสิ่งที่คุณต้องการ
สำหรับคนที่ต้องการทำด้วย SQL ดิบโดยไม่ต้องใช้ php, java, python เป็นต้น
SET SQL_SAFE_UPDATES = 0;
UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';
ฉันต้องการปัดเศษขึ้นเป็นตัวเลขถัดไปในตำแหน่งหลักที่ใหญ่ที่สุด (มีชื่อนี้หรือไม่) ดังนั้นฉันจึงสร้างฟังก์ชันต่อไปนี้ (ใน 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
สามารถทำได้อย่างง่ายดายโดยใช้ฟังก์ชัน PHP ' fmod ' รหัสด้านล่างเป็นรหัสเฉพาะสำหรับ 10 แต่คุณสามารถเปลี่ยนเป็นตัวเลขใดก็ได้
$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;
เอาท์พุท: 100
ใกล้ที่สุด 10 ควรเป็นดังนี้
$number = ceil($input * 0.1)/0.1 ;
ลองทำตามนี้ ...... ส่งผ่านในหมายเลขที่จะปัดเศษและมันจะปัดเศษเป็นสิบที่ใกล้ที่สุดหวังว่ามันจะช่วย ....
รอบ ($ num, 1);