2011-09-19 12 views
7

मुझे वर्तमान में अपने निकटतम प्रमुख संख्या तक संख्याओं को गोल करने की आवश्यकता है। (सुनिश्चित नहीं हैं कि क्या सही शब्द यहाँ है)जावास्क्रिप्ट बुद्धिमान गोलिंग

लेकिन मैं क्या

IE: 

13 // 20 
349 // 400 
5645 // 6000 
9892 // 10000 
13988 // 20000 
93456 // 100000 
231516 // 300000 

etc. etc. 

प्राप्त करने के लिए कोशिश कर रहा हूँ मैं इस लेकिन इसकी इतनी दर्दनाक और केवल संभालती संख्या करने का एक तरीका लागू किया है का एक उदाहरण देख एक लाख तक और यदि मैं उच्च स्तर पर जाना चाहता हूं तो मुझे और अधिक जोड़ना होगा यदि बयान (हाँ देखें कि मैंने इसे कैसे प्रभावित किया है: पी बहुत गर्व नहीं है, लेकिन मस्तिष्क फंस गया है)

वहां पहले से कुछ होना चाहिए लेकिन google मुझे शायद बहुत मदद नहीं कर रहा है क्योंकि मुझे

करना चाहते हैं,
+0

और मैं एक प्रेमिका की जरूरत है, लेकिन हम काम करने के लिए हो सकता है चीजें करने के लिए! 50000 के बजाय 34 9-> 400, 13 9 88-> 20000 के बजाय 15000, 231516-> 300000 के बजाय 30000 के तर्क का तर्क क्या है?! – Bakudan

+1

@ बाकुडन ट्रिस्टन के उदाहरणों के लिए एक तर्क है। अनिवार्य रूप से, आप संख्या को 1 महत्वपूर्ण अंक तक सरल बनाते हैं, हमेशा गोल करते हैं। – cheeken

+0

@cheeken एक बेहतर शब्द है तो मैंने क्या उपयोग किया! महत्वपूर्ण अंक – Tristan

उत्तर

13
<script type="text/javascript"> 
    function intelliRound(num) { 
     var len=(num+'').length; 
     var fac=Math.pow(10,len-1); 
     return Math.ceil(num/fac)*fac; 
    } 
    alert(intelliRound(13)); 
    alert(intelliRound(349)); 
    alert(intelliRound(5645)); 
    // ... 
</script> 

देखें http://jsfiddle.net/fCLjp/

+0

सुंदरता से सरल! मेरा दिमाग बुरा काम नहीं कर रहा था! बस इसे देखकर मुझे आश्चर्य होता है कि मुझे यह कैसे याद आया! – Tristan

1

आप यहां बताए अनुसार, Math.ceil फ़ंक्शन का उपयोग कर सकते हैं:

javascript - ceiling of a dollar amount

अपने नंबर प्राप्त करने का अधिकार आप उन्हें 10 से विभाजित करने के लिए (अगर वे 2 अंक) होगा, 100 (अगर वे 3 अंक) है, और इतने पर ...

7

एक तरह से;

var a = [13, // 20 
349, // 400 
5645, // 6000 
9892, // 10000 
13988, // 20000 
93456, // 100000 
231516 // 300000 
] 

for (var i in a) { 
    var num = a[i]; 
    var scale = Math.pow(10, Math.floor(Math.log(num)/Math.LN10)); 
    print([ num, Math.ceil(num/scale) * scale ]) 
} 

13,20 
349,400 
5645,6000 
9892,10000 
13988,20000 
93456,100000 
231516,300000 
0

The answer from @rabudde अच्छी तरह से काम करता है, लेकिन उन ऋणात्मक संख्याओं को संभालने की जरूरत है कि के लिए, यहाँ एक अद्यतन संस्करण है:

function intelliRound(num) { 
 
    var len = (num + '').length; 
 
    var result = 0; 
 
    if (num < 0) { 
 
     var fac = Math.pow(10, len - 2); 
 
     result = Math.floor(num/fac) * fac; 
 
    } 
 
    else { 
 
     var fac = Math.pow(10, len - 1); 
 
     result = Math.ceil(num/fac) * fac; 
 
    } 
 
    return result; 
 
} 
 
alert(intelliRound(13)); 
 
alert(intelliRound(349)); 
 
alert(intelliRound(5645)); 
 
      
 
alert(intelliRound(-13)); 
 
alert(intelliRound(-349)); 
 
alert(intelliRound(-5645));

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