2012-05-02 11 views
6

प्रश्न
किसी निकटतम 0.05 जावास्क्रिप्ट में करने के लिए एक नाव दौर के लिए एक रास्ता के बारे में पता है?जावास्क्रिप्ट में निकटतम 0.05 से आगे निकलने

उदाहरण

BEFORE | AFTER 
    2.51 | 2.55 
    2.50 | 2.50 
    2.56 | 2.60 

वर्तमान कोड

var _ceil = Math.ceil; 
Math.ceil = function(number, decimals){ 
    if (arguments.length == 1) 
    return _ceil(number); 

    multiplier = Math.pow(10, decimals); 
    return _ceil(number * multiplier)/multiplier; 
} 

फिर कहीं और ... return (Math.ceil((amount - 0.05), 1) + 0.05).toFixed(2);

कौन सा में ...

जिसके परिणामस्वरूप है
BEFORE | AFTER 
    2.51 | 2.55 
    2.50 | 2.55 
    2.56 | 2.65 

उत्तर

23

गुणा 20 से, फिर 20 से विभाजित:

(Math.ceil(number*20)/20).toFixed(2) 
+0

बिल्कुल सही - बहुत बहुत धन्यवाद। क्या आप समझा सकते हैं * क्यों * आपको ऐसा करने की ज़रूरत है? – Sam

+4

हालांकि मैं इस परिवर्तन को 'Math.ceil (संख्या * 20 - 0.5)/20) पर विचार करता हूं। टिक्स्ड (2) ' – Arth

+0

1 = 20 * 0.05; आप 20 से गुणा करते हैं ताकि अगले पूर्णांक तक गोल हो और फिर 20 तक वापस विभाजित मूल के अगले 0.05 तक घूमने के बराबर हो। – Armatus

6

रोब मेरा अलावा के साथ जवाब:

Math.ceil(number*20 - 0.5)/20).toFixed(2) 

अन्यथा यह हमेशा निकटतम 0.05 से ऊपर दौर।

** अद्यतन **

क्षमा मुद्दा उठाया गया यह नहीं है क्या मूल पोस्टर चाहता था।

+0

मैंने आपकी टिप्पणी को ऊपर उठाया, लेकिन फिर मुझे एहसास हुआ कि ओपी ने गोल करने के लिए कहा (प्रश्न का शीर्षक देखें)। –

+4

+1 क्योंकि यह वही था जो _I_ ढूंढ रहा था! – rymo

4

मैं उस संख्या से वास्तव में विभाजित करने के मानक के लिए जाऊंगा जो आप इसे फैक्टर कर रहे हैं, और उसके चारों ओर घुमाकर इसे फिर से गुणा कर रहे हैं। ऐसा लगता है कि आप किसी भी संख्या के साथ उपयोग कर सकते हैं और आप जो हासिल करने की कोशिश कर रहे हैं उसकी मानसिक छवि को बनाए रख सकते हैं।

var val = 26.14, 
    factor = 0.05; 

val = Math.round(val/factor) * factor; 

यह दसियों, सैकड़ों या किसी भी संख्या के लिए काम करेगा। यदि आप विशेष रूप से उच्च संख्या के लिए गोल कर रहे हैं तो Math.round के बजाय Math.ceil का उपयोग करें।

2

मैं एक समारोह है कि

  • कदम दशमलव द्वारा आप के लिए यह करता है दो स्थानों (100 से गुणा)
  • तो आधुनिक (%) कि inflatedNumber 5 से अधिक लिख सकते हैं और शेष मिलेगा
  • 5 से remainder घटाना
  • क्या आप जानते हैं ताकि क्या 'खाई' (ceilGap) अपना नंबर और अगले निकटतम .05
  • के बीच अंत में है, अपनेविभाजित 10032 द्वाराताकि यह आपके मूल फ्लोट पर वापस जा सके, और वॉयला, आपकी संख्या निकटतम तक पहुंच जाएगी .05।

    function calcNearestPointZeroFive(num){ 
        var inflatedNumber = num*100, 
         remainder  = inflatedNumber % 5; 
         ceilGap  = 5 - remainder 
    
        return (inflatedNumber + ceilGap)/100 
    } 
    

आप 5.50 अछूता की तरह नंबर छोड़ने के लिए आप हमेशा इस चेकर जोड़ सकते हैं चाहते हैं:

if (remainder===0){ 
    return num 
} else { 
    var ceilGap = 5 - remainder 
    return (inflatedNumber + ceilGap)/100 
} 
0

आप डाल करने के लिए -1 दौर आधा करने के लिए नीचे की जरूरत है और उसके बाद -1 से गुणा करें उदाहरण के नीचे भालू की तरह।

<script type="text/javascript"> 
 

 
    function roundNumber(number, precision, isDown) { 
 
    var factor = Math.pow(10, precision); 
 
    var tempNumber = number * factor; 
 
    var roundedTempNumber = 0; 
 
    if (isDown) { 
 
     tempNumber = -tempNumber; 
 
     roundedTempNumber = Math.round(tempNumber) * -1; 
 
    } else { 
 
     roundedTempNumber = Math.round(tempNumber); 
 
    } 
 
    return roundedTempNumber/factor; 
 
    } 
 
</script> 
 

 
<div class="col-sm-12"> 
 
    <p>Round number 1.25 down: <script>document.write(roundNumber(1.25, 1, true));</script> 
 
    </p> 
 
    <p>Round number 1.25 up: <script>document.write(roundNumber(1.25, 1, false));</script></p> 
 
</div>

संबंधित मुद्दे