जावास्क्रिप्ट राउंडऑफ संख्या निकटतम 0.5


92


क्या कोई मुझे एक विचार दे सकता है कि मैं किसी नंबर को निकटतम 0.5 पर कैसे गोल कर सकता हूं।
मुझे स्क्रीन रिज़ॉल्यूशन के अनुसार एक वेब पेज में तत्वों को स्केल करना होगा और उसके लिए मैं केवल 1, 1.5 या 2 और उसके बाद आदि में फ़ॉन्ट आकार असाइन कर सकता हूं।

यदि मैं इसे राउंड ऑफ करता हूं तो या तो 1 दशमलव स्थान या कोई भी नहीं। मैं इस नौकरी को कैसे पूरा कर सकता हूं?

जवाबों:


181

अपना खुद का फ़ंक्शन लिखें जो 2 से गुणा करता है, गोल करता है, फिर 2 से विभाजित करता है, जैसे

function roundHalf(num) {
    return Math.round(num*2)/2;
}

बस इसका उपयोग मौद्रिक मूल्यों पर एक कम फ़ंक्शन को साफ करने के लिए किया गया था जो 9 दशमलव बिंदुओं के साथ वापस आ रहा था ... (संख्या * 100) / 100 पूरी तरह से काम किया।
— डस्टिन क्रिडलर

यदि आप 13.0 या 13.5 के साथ समाप्त करना चाहते हैं, तो मैंने आपके उत्तर को नीचे दिए गए के साथ जोड़ा: फ़ंक्शन राउंडहलफ़ (संख्या) {वापसी (मैथ.रेड (संख्या * 2) / 2) .toFixed (1); }
— डैन डी

संख्या 2 को पूर्ण करना सभी मामलों के लिए काम नहीं कर रहा है..किसी भी दशमलव को 15.27 => की तरह लें, अपने सूत्र का उपयोग करके => 15 जहाँ वास्तव में इसे 15.5 लौटाया जाना चाहिए। **** मुझे लगता है कि OfFixed का उपयोग करना बेहतर होगा (संख्या * 2) .toFixed () / 2
— sfdx बम

81

यहां एक और सामान्य समाधान है जो आपके लिए उपयोगी हो सकता है:

function round(value, step) {
    step || (step = 1.0);
    var inv = 1.0 / step;
    return Math.round(value * inv) / inv;
}

round(2.74, 0.1) = 2.7

round(2.74, 0.25) = 2.75

round(2.74, 0.5) = २.५

round(2.74, 1.0) = 3.0


1
क्या invमतलब है? invचर क्या दर्शाता है?
— देिलन

1
@Deilan मुझे लगता है inverse ।
— एलेक्स के

2

Math.round(-0.5)रिटर्न 0 , लेकिन यह गणित के नियमों के अनुसार -1 होना चाहिए ।

और जानकारी: गणित.गोल () और Number.prototype.toFixed ()

function round(number) {
    var value = (number * 2).toFixed() / 2;
    return value;
}

1
@ यूरी आप जो कह रहे हैं, उस पर विस्तार करने के लिए, roundदिए गए मान से अधिक अगले पूर्णांक तक चक्कर लगाते हैं , जो नकारात्मक संख्या के संदर्भ में सकारात्मक पूर्णांक स्पेक्ट्रम की ओर होगा। -2.5 -2 तक जाएगी। क्या वो सही है?
— डैनी बुल्लिस

हाँ, बस सत्यापित किया गया। Math.ceil(-1.75) == -1और Math.floor(-1.75) == -2। तो इसके लिए किसी को भी फंसाने के लिए, बस इसे संख्या से अधिकceil रिटर्न के रूप में सोचें , संख्या से कम रिटर्न देता है । floor
— डैनी बुल्लिस

2

केवल 0.5 से अधिक पर गोलाई के लिए न्यूट्रॉन द्वारा शीर्ष उत्तर का विस्तार करने के लिए

function roundByNum(num, rounder) {
    var multiplier = 1/(rounder||0.5);
    return Math.round(num*multiplier)/multiplier;
}

console.log(roundByNum(74.67)); //expected output 74.5
console.log(roundByNum(74.67, 0.25)); //expected output 74.75
console.log(roundByNum(74.67, 4)); //expected output 76

1
    function roundToTheHalfDollar(inputValue){
      var percentile = Math.round((Math.round(inputValue*Math.pow(10,2))/Math.pow(10,2)-parseFloat(Math.trunc(inputValue)))*100)
      var outputValue = (0.5 * (percentile >= 25 ? 1 : 0)) + (0.5 * (percentile >= 75 ? 1 : 0))
      return Math.trunc(inputValue) + outputValue
    }

तुनकी बेहतर प्रतिक्रिया देखने से पहले मैंने इसे लिखा;)


0
var f = 2.6;
var v = Math.floor(f) + ( Math.round( (f - Math.floor(f)) ) ? 0.5 : 0.0 );

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