जावास्क्रिप्ट: 5 के अगले कई तक गोल


113

मुझे एक उपयोगिता फ़ंक्शन की आवश्यकता होती है जो पूर्णांक मान (लंबाई में 2 से 5 अंक तक) लेता है जो निकटतम के बजाय 5 के अगले कई तक गोल होता है । यहां मुझे वही मिला है:

function round5(x)
{
    return (x % 5) >= 2.5 ? parseInt(x / 5) * 5 + 5 : parseInt(x / 5) * 5;
}

जब मैं दौड़ता हूं round5(32), तो यह मुझे देता है 30, जहां मैं 35 चाहता हूं।
जब मैं दौड़ता हूं round5(37), तो यह मुझे देता है 35, जहां मैं 40 चाहता हूं।

जब मैं दौड़ता हूं round5(132), तो यह मुझे देता है 130, जहां मैं 135 चाहता हूं।
जब मैं दौड़ता हूं round5(137), तो यह मुझे देता है 135, जहां मैं 140 चाहता हूं।

आदि...

मैं यह कैसे करु?


3
round5(5)5, या 10 देना चाहिए ?
user2357112

1
कैसे के बारे में: x को 5 से विभाजित करें, निकटतम पूर्णांक (Math.ceil फ़ंक्शन का उपयोग करके) तक गोल करें और फिर 5 से गुणा करें?
मार्टिन विल्सन

2
राउंड 5 (5) में 5 देना चाहिए
अमित एरंडोल

जवाबों:


271

यह काम करेगा:

function round5(x)
{
    return Math.ceil(x/5)*5;
}

यह फ़ंक्शन के numberनिकटतम कई प्रकार के सामान्य राउंडिंग का एक रूपांतर है , लेकिन इसके बजाय गणितीय नियमों के अनुसार इसे हमेशा डाउन / अप के बजाय गोल करना होता है।xMath.round(number/x)*x.ceil.round


क्या आप इस बारे में थोड़ा समझा सकते हैं कि आप इस समाधान में इतनी तेजी से कैसे आए? मैंने सोचा था कि Math.ceil केवल पूर्णांकों तक दशमलव को पूरा करता है।
अमित एरंडोल

2
ठीक है, यह यहाँ पूरे पूर्णांक तक चक्कर लगाता है, @AmitErandole;)
माइकल क्रेलिन - हैकर

1
+1 कॉम्पैक्ट और कुशल के लिए ... और यह 10 के लिए गोल होगा, है ना? :)
zx81

मैं इस फंक्शन में एक और पैरामीटर
जोड़ूंगा

3
मैं इस समाधान प्यार करता हूँ! मैंने इसे जरूरत के अनुसार कई इनलाइन को आसानी से बदलने के लिए एक क्लोजर के साथ लागू किया: const roundToNearestMultipleOf = m => n => Math.round(n/m)*mउपयोग:roundToNearestMultipleOf(5)(32)
gfullam

12
const roundToNearest5 = x => Math.round(x/5)*5

यह संख्या को निकटतम 5. पर गोल करेगा। हमेशा निकटतम 5 तक गोल करने के लिए, उपयोग करें Math.ceil। इसी तरह, हमेशा गोल करने के लिए, Math.floorइसके बजाय का उपयोग करें Math.round। फिर आप इस फ़ंक्शन को कॉल कर सकते हैं जैसे कि आप कोई अन्य। उदाहरण के लिए,

roundToNearest5(21)

वापस होगा:

20

स्वीकृत उत्तर वास्तव में गलत है। यह सही तरीका है। डेसीमल के साथ 2.5
ओलिवर डिक्सन


5

मैं कुछ इसी तरह की खोज करते हुए यहां पहुंचा। यदि मेरी संख्या –0, 1-1 है, तो -2 को फर्श से –0 तक रखना चाहिए, और यदि यह -3, 4-4 है, तो इसे छत से -5 तक ले जाना चाहिए।

मैं इस समाधान के साथ आया:

function round(x) { return x%5<3 ? (x%5===0 ? x : Math.floor(x/5)*5) : Math.ceil(x/5)*5 }

और परीक्षण:

for (var x=40; x<51; x++) {
  console.log(x+"=>", x%5<3 ? (x%5===0 ? x : Math.floor(x/5)*5) : Math.ceil(x/5)*5)
}
// 40 => 40
// 41 => 40
// 42 => 40
// 43 => 45
// 44 => 45
// 45 => 45
// 46 => 45
// 47 => 45
// 48 => 50
// 49 => 50
// 50 => 50

1
यह और अधिक बस का उपयोग करके पूरा किया जा सकता हैMath.round
स्पेंसर Stolworthy

2
voici 2 solutions possibles :
y= (x % 10==0) ? x : x-x%5 +5; //......... 15 => 20 ; 37 => 40 ;  41 => 45 ; 20 => 20 ; 

z= (x % 5==0) ? x : x-x%5 +5;  //......... 15 => 15 ; 37 => 40 ;  41 => 45 ; 20 => 20 ;

सादर पॉल


0

// सटीक के साथ दौर

var round = function (value, precision) {
    return Math.round(value * Math.pow(10, precision)) / Math.pow(10, precision);
};

// परिशुद्धता के साथ 5 राउंड

var round5 = (value, precision) => {
    return round(value * 2, precision) / 2;
}

0
const fn = _num =>{
    return Math.round(_num)+ (5 -(Math.round(_num)%5))
}

राउंड का उपयोग करने का कारण यह है कि अपेक्षित इनपुट एक यादृच्छिक संख्या हो सकती है।

धन्यवाद!!!


-2
if( x % 5 == 0 ) {
    return int( Math.floor( x / 5 ) ) * 5;
} else {
    return ( int( Math.floor( x / 5 ) ) * 5 ) + 5;
}

शायद?


संदर्भ: intपरिभाषित नहीं है। शायद आप चाहते थे parseInt, लेकिन यह आवश्यक नहीं है क्योंकि Math.floorएक नंबर देता है।
पंजा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.