किसी संख्या को निकटतम 10 तक कैसे गोल किया जाए?


99

हम किसी संख्या को php के निकटतम 10 तक कैसे रोक सकते हैं?

कहो मेरे पास है 23, मैं इसे बंद करने के लिए किस कोड का उपयोग करूंगा 30?


51
एर, कि निकटतम 10 नहीं है?
रोलैंड शॉ

1
ठीक है, फिर 1 महत्वपूर्ण आंकड़ा तक गोल! हाहा
टारनफ़ेल्ड

3
उचित रूप से, शीर्षक में, यह "राउंड अप टू नम्बर 10" कहता है, भले ही पाठ "राउंड ऑफ" कहे ... मुझे पूरा यकीन है कि वह हमेशा अगले 10 तक गोल करने के लिए कह रहा है
हारून वालेंटाइन

1
10 की शक्ति के लिए गोल, stackoverflow.com/q/43932648/6521116
क्रिश रूफ

जवाबों:


219

floor() नीचे जाएगा।

ceil() ऊपर जाएगा।

round() डिफ़ॉल्ट रूप से निकटतम में जाएगा।

10 से विभाजित करें, छत करें, फिर महत्वपूर्ण अंकों को कम करने के लिए 10 से गुणा करें।

$number = ceil($input / 10) * 10;

संपादित करें: मैं इसे इस तरह से लंबे समय से कर रहा हूं .. लेकिन TallGreenTree का जवाब साफ है।


4
टालग्रीनट्री का जवाब हमेशा यूपी में नहीं होता। यह उत्तर छत ()
ब्रैंडन

1
TallGreenTree का उत्तर राउंड () के तीसरे पैरामीटर (मोड) का उपयोग करके राउंडिंग अप / डाउन का समर्थन करता है। दौर ($ इनपुट, -1, PHP_ROUND_HALF_UP)
डैरन श्वेनेके

4
@DarenSchwenke, तीसरा पैराम काफी काम नहीं करता है जैसा कि आप मानते हैं, कि केवल अंतराल के बीच आधे रास्ते के मामले को नियंत्रित करता है। (15,-1, PHP_ROUND_HALF_UP); // 20,(14,-1, PHP_ROUND_HALF_UP); // 10
आर्थर

168
round($number, -1);

यह $ 10. के निकटतम दौर में होगा। यदि आप राउंडिंग मोड को बदलने के लिए आवश्यक हो तो एक तीसरा चर भी पास कर सकते हैं।

अधिक जानकारी यहाँ: http://php.net/manual/en/function.round.php


11
क्या आप प्रश्नकर्ता को "निकटतम 10 के लिए गोल" मानने के लिए उन्हें दोषी ठहरा सकते हैं, जब प्रश्न "दो बार निकटतम 10 के लिए" कहा जाता है?
सेजयोज

यह उत्तर प्रश्नकर्ता द्वारा स्वयं को स्पष्ट करने से पहले पोस्ट किया गया था। मुझे लगा कि वह सवाल में सही तरह से चक्कर नहीं लगा रहा है।
तल्लिग्रीनट्री

12
TallGreenTree सही है। आप 3 तर्क के साथ राउंडिंग मोड सेट कर सकते हैं: "PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, या PHP_ROUND_HALF_ODD में से एक मोड"
d -_- b

13
यह सही परिणाम नहीं देता है। 23होगा 20और नहीं 30क्योंकि यह हमेशा निकटतम 10. पर रौंद जाएगा। गोलाई मोड मदद नहीं करेगा, क्योंकि यह केवल आधा आधा, उसके बाद x.
तिमो ००००

1
उदास है कि छत () और फर्श () में अभी तक सटीक पैरामीटर नहीं है।
चौकोरंडी

15

मैं वास्तव में एक फ़ंक्शन की खोज कर रहा था जो निकटतम चर के लिए गोल हो सकता है, और यह पृष्ठ मेरी खोजों में आता रहा। इसलिए जब मैंने अंत में खुद ही फंक्शन लिखना शुरू कर दिया, तो मैंने सोचा कि मैं इसे दूसरों के लिए खोजने के लिए यहां पोस्ट करूंगा।

फ़ंक्शन निकटतम चर के लिए गोल होगा:

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

केनी, आप सबसे अच्छे हैं। मैं केवल यह चाहता हूं कि मेरे पास ग्राफिक प्रतिनिधित्व था कि यह कैसे गोल होता है इसलिए मुझे यकीन है कि यह 100% मामलों में अपेक्षित परिणाम देता है। मुझे लगता है कि मुझे कुछ परीक्षण करना होगा।
अल्फ.डेव

क्या इस कोड को गोल मोड HALF_UP / HALF_DOWN के साथ तीसरा पैरामीटर जोड़ने का कोई तरीका है?
अल्फ.डेव

12

इस सवाल में कई सारी अटकलें हैं, शायद सभी आपको वह जवाब देंगे जिसकी आपको तलाश है। लेकिन जैसा @TallGreenTree उल्लेख करता है, इसके लिए एक फ़ंक्शन है।

लेकिन @TallGreenTree के उत्तर की समस्या यह है कि यह गोल नहीं है, यह निकटतम 10. पर गोल है। इसे हल करने के लिए, +5अपने नंबर को गोल करने के लिए जोड़ें । यदि आप नीचे चक्कर लगाना चाहते हैं, तो करें-5

तो कोड में:

round($num + 5, -1);

आप उपयोग नहीं कर सकते round mode राउंड अप लिए , क्योंकि यह केवल भिन्न और पूर्ण संख्याओं के लिए नहीं है।

यदि आप नज़दीकी को गोल करना चाहते हैं 100, तो आप उपयोग को कम कर सकते हैं +50


यह गैर-दशमलव संख्या के लिए काम नहीं करता है। 10 20 हो जाता है
लुसियानो



2

हम के साथ दौर के माध्यम से "धोखा" कर सकते हैं

$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;    
}

नमस्ते, यह पूरी तरह से काम करता है - उस सवाल के लिए, मैं यूपी को कैसे गोल कर सकता हूं? तो 23 से 30?
टारनफेल्ड



0

मेरा पहला आवेग "php गणित" के लिए Google पर आया था और मुझे पता चला कि "गोल ()" नामक एक मुख्य गणित पुस्तकालय फ़ंक्शन है, जो संभवतः आप चाहते हैं।


0

उन लोगों के लिए जो कच्चे SQL के साथ करना चाहते हैं, php, java, python आदि का उपयोग किए बिना। SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';


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;
}

0
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

0

यह PHP ' fmod ' फ़ंक्शन का उपयोग करके आसानी से पूरा किया जा सकता है। नीचे दिया गया कोड 10 के लिए विशिष्ट है लेकिन आप इसे किसी भी संख्या में बदल सकते हैं।

$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;

OUTPUT: 100


0

निकटतम 10 के लिए, नीचे होना चाहिए

$number = ceil($input * 0.1)/0.1 ;

-2

यह कोशिश करें ...... इसे बंद करने के लिए संख्या में पास करें और यह निकटतम दसवें के लिए बंद हो जाएगा। इससे मदद मिलती है ...।

दौर ($ संख्या, 1);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.