2008-10-29 11 views
62

एक परियोजना पर काम करते हैं, मैं एक जे एस स्क्रिप्ट एक पूर्व कर्मचारी के द्वारा बनाई गई है कि मूल रूप सेमैं जावास्क्रिप्ट में किसी संख्या को कैसे गोल करूं?

Name : Value 
Name2 : Value2 

आदि

peoblem के रूप में एक रिपोर्ट बनाता है भर में आया है कि कभी-कभी मूल्य कर सकते है 2.20011E+17 रूप में फ्लोट (विभिन्न परिशुद्धता के साथ), पूर्णांक, या यहां तक ​​कि फॉर्म में भी रहें। मैं आउटपुट करना चाहता हूं शुद्ध पूर्णांक हैं। हालांकि, मुझे बहुत सारी जावास्क्रिप्ट नहीं पता है। मैं एक ऐसी विधि लिखने के बारे में कैसे जाऊं जो कभी-कभी इन-फ्लोट्स लेता है और उन्हें पूर्णांक बनाता है?

+0

मैं मैथ.फ्लूर() को कॉल करने की भी सिफारिश करता हूं, इसलिए यदि आप यही चाहते हैं तो यह गोल नहीं होता है। – Archmede

उत्तर

46

रूप में अच्छी तरह आप उन्हें दौर एक संख्या में अपने इनपुट कन्वर्ट करने के लिए हवलदार और उसके बाद:

function toInteger(number){ 
    return Math.round( // round to nearest integer 
    Number(number) // type cast your input 
); 
}; 

या एक एक लाइनर के रूप में:

function toInt(n){ return Math.round(Number(n)); }; 

परीक्षण विभिन्न मूल्यों के साथ:

toInteger(2.5);   // 3 
toInteger(1000);   // 1000 
toInteger("12345.12345"); // 12345 
toInteger("2.20011E+17"); // 220011000000000000 
+24

के लिए जाना है एक लाइनर बिल्कुल 4 लाइनर जैसा ही है :) –

+8

वास्तविक एक-लाइनर 'Math.round (number)' है। पूरे प्रकार का कास्टिंग व्यवसाय अनावश्यक है। जब आवश्यक हो तो जावास्क्रिप्ट तारों को स्वचालित रूप से संख्याओं पर ले जाया जाता है। – AaronAsAChimp

+0

@AaronAsachimp मैं सहमत नहीं हो सकता - यदि स्ट्रिंग में अंक और '.' या' E + 'से अन्य वर्ण शामिल हैं तो 'Math.round'' NaN' वापस आ जाएगा। – matewka

15

आप निकटतम पूर्णांक में संख्याओं को गोल करने के लिए Math.round() का उपयोग कर सकते हैं।

Math.round(532.24) => 532 

इसके अलावा, आप parseInt() और parseFloat() उपयोग करते हैं, एक निश्चित प्रकार के लिए एक चर कास्ट करने के लिए इस मामले पूर्णांक और चल बिन्दु में कर सकते हैं।

+0

तो Math.round (532.24,0) = 532? – Ace

+2

Math.round() में दूसरा तर्क नहीं है, क्योंकि यह संख्या को निकटतम पूर्णांक तक ले जाता है। –

29

ECMAScript specification के अनुसार, जावास्क्रिप्ट में संख्या केवल डबल परिशुद्धता 64 बिट प्रारूप आईईईई 754 से इसलिए वहाँ वास्तव में जावास्क्रिप्ट में एक पूर्णांक प्रकार नहीं है प्रतिनिधित्व कर रहे हैं।

इन संख्याओं के दौर के संबंध में, आप इसे प्राप्त करने के कई तरीके हैं। Math वस्तु हमें तीन राउंडिंग तरीकों जो हम उपयोग कर सकते हैं देता है:

सबसे अधिक इस्तेमाल किया जाता है, यह निकटतम पूर्णांक तक गोल मान देता है। फिर Math.floor() है जो किसी संख्या से कम या उसके बराबर सबसे बड़ा पूर्णांक देता है। अंत में हमारे पास Math.ceil() फ़ंक्शन है जो किसी संख्या से अधिक या उसके बराबर सबसे छोटा पूर्णांक देता है।

toFixed() भी है जो निश्चित-बिंदु नोटेशन का उपयोग करके संख्या का प्रतिनिधित्व करने वाली स्ट्रिंग देता है।

पी.एस. .: वहाँ गणित.गोल() विधि में कोई 2 तर्क है।toFixed()है नहीं आईई विशिष्ट, अपने within ECMAScript विनिर्देश

+0

दूसरी बहस की आपूर्ति के लिए अच्छी व्याख्या और मेरा बुरा; मैं इसे प्रतिबिंबित करने के लिए अपना उत्तर संपादित करूंगा। –

+0

आपको बस spec =] –

102

आप अंकों की एक निश्चित संख्या को पूर्णांक बनाना निम्नलिखित समारोह

function roundNumber(number, digits) { 
      var multiple = Math.pow(10, digits); 
      var rndedNum = Math.round(number * multiple)/multiple; 
      return rndedNum; 
     } 
+13

['.tofixed()'] का उपयोग करना बेहतर हो सकता है (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/संख्या/tofixed), जावास्क्रिप्ट 1.5 में जोड़ा गया। –

+1

ध्यान दें कि फिक्स्ड() एक स्ट्रिंग आउटपुट करता है। '(0.1 + 0.2) .toFixed (2)' स्ट्रिंग "0.30" पैदा करता है। लेकिन आप इसे "+" तैयार करके इसे किसी संख्या में वापस ले सकते हैं। '+ (0.1 + 0.2) .toFixed (2)' 0.3 – Chris

+2

उत्पन्न करता है यदि आप लॉनाश का उपयोग कर रहे हैं [lodash's round function] (https://lodash.com/docs/4.17.4#round): '_ आसपास (संख्या, परिशुद्धता) ' – qwertz

25

यहाँ है एक तरह से प्रयोग कर एक दूसरा तर्क के साथ Math.round() उपयोग करने के लिए (गोलाई के लिए दशमलव की संख्या) में सक्षम होने की जरूरत है:

// 'improve' Math.round() to support a second argument 
var _round = Math.round; 
Math.round = function(number, decimals /* optional, default 0 */) 
{ 
    if (arguments.length == 1) 
    return _round(number); 

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

// examples 
Math.round('123.4567', 2); // => 123.46 
Math.round('123.4567'); // => 123 
20

तुम भी उपयोग कर सकते हैं toFixed(x) या toPrecision(x) जहां एक्स अंकों की संख्या है।

इन दोनों ही तरीकों से गोलाई के लिए सभी प्रमुख ब्राउज़रों

0

एक बहुत अच्छा सन्निकटन में समर्थित हैं:

function Rounding (number, precision){ 

var newNumber; 
var sNumber = number.toString(); 

var increase = precision + sNumber.length - sNumber.indexOf('.') + 1; 

if (number < 0) 
    newNumber = (number - 5 * Math.pow(10,-increase)); 
else 
    newNumber = (number + 5 * Math.pow(10,-increase)); 

var multiple = Math.pow(10,precision); 

return Math.round(newNumber * multiple)/multiple; 
} 

केवल कुछ मामलों में जब संख्या का दशमलव भाग की लंबाई बहुत लंबी है कि यह गलत हो

-1

Math.floor (1 9 .5) = 1 भी काम करना चाहिए।

+1

मंजिल! = दौर। 'मंजिल (1 9 .5) == 1 9', लेकिन' दौर (1 9 .5) = 20'। – Dukeling