दिलचस्प पोस्ट
जीआईटी को एचटीटीपी / एचटीएमएल के साथ रिमोट रिपॉजिटरी में नहीं लाया जा सकता ऑब्जेक्ट और कैमरे के बीच की दूरी जानने के लिए, किसी छवि से वास्तविक वस्तु का आकार कैसे प्राप्त करें? सी ++ वैलेरेरे बनाम वेक्टर रोबोट को एक फ़ॉर्म भरने से कैसे रोका जा सकता है? किसी सदस्य के लिए गैर-डिफॉल्ट कन्स्ट्रक्टर का आप कैसे उपयोग करते हैं? मैं एएसपी.नेट एमवीसी में लोअरकेस मार्ग कैसे कर सकता हूं? "हर बोली से पहले स्लैश" समस्या आर में समाप्त "+" संकेत "गैर-स्थिर विधि को एक स्थिर संदर्भ से संदर्भित नहीं किया जा सकता" त्रुटि कैसे जावास्क्रिप्ट में क्षेत्रों / कोड पतन लागू करने के लिए कूकी मूल्यों को सफेद स्थान के साथ उद्धरण चिह्नों के साथ क्लाइंट साइड क्यों आते हैं? सेलेनियम वेबड्राइवर का उपयोग करके विंडोज़ फाइल अपलोड कैसे करें? मैं दृश्य स्टूडियो में डिबगिंग करते समय विशिष्ट वातावरण चर कैसे सेट करूं? रेडयुक्स ऐप में स्थानीय स्टॉरेज को कहाँ लिखना है? जीपीआरएफ के विकल्प

जावास्क्रिप्ट गणित, दो दशमलव स्थानों पर गोल

मेरे पास जावास्क्रिप्ट वाक्य रचना निम्न है:

var discount = Math.round(100 - (price / listprice) * 100); 

यह पूर्ण संख्या तक राउंड करता है, मैं दो दशमलव स्थानों से परिणाम कैसे वापस कर सकता / सकती हूं?

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट गणित, दो दशमलव स्थानों पर गोल"

नोट – यदि 3 अंकों की सटीकता महत्वपूर्ण है तो 4 संपादित करें देखें

 var discount = (price / listprice).toFixed(2); 

टूफिक्स आपके लिए 2 दशमलव से परे मूल्यों के आधार पर ऊपर या नीचे जाएगा।

उदाहरण: http://jsfiddle.net/calder12/tv9HY/

प्रलेखन: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed

संपादित करें – जैसा कि अन्य लोगों द्वारा उल्लिखित है, यह परिणाम को स्ट्रिंग में कनवर्ट करता है। इस से बचने के लिए:

 var discount = +((price / listprice).toFixed(2)); 

2 संपादित करें – जैसा कि टिप्पणी में भी उल्लेख किया गया है, यह फ़ंक्शन कुछ परिशुद्धता में विफल रहता है, उदाहरण के तौर पर 1.005 के मामले में, यह 1.01 के बजाय 1.00 लौटेगा। अगर इस डिग्री के लिए सटीकता महत्वपूर्ण है तो मुझे यह जवाब मिल गया है: https://stackoverflow.com/a/32605063/1726511 जो सभी परीक्षण मैंने कोशिश किए हैं के साथ अच्छी तरह से काम करने लगता है।

यद्यपि एक मामूली संशोधन की आवश्यकता है, ऊपर दिए गए उत्तर में दिए गए फ़ंक्शन को एक ही नंबर पर गोल करने के बाद पूरे नंबर पर दिए गए फ़ंक्शन, उदाहरण के लिए 99.004 99 की बजाय 99 की बदले 99 जो कीमतों को प्रदर्शित करने के लिए आदर्श नहीं है।

3 संपादित करें – वास्तविक रिटर्न पर फिक्स्ड होने के कारण कुछ नंबरों को पंगा लेना अभी भी लगता है, यह अंतिम संपादन कार्य करने के लिए प्रतीत होता है गीज़ कई reworks!

  var discount = roundTo((price / listprice), 2); function roundTo(n, digits) { if (digits === undefined) { digits = 0; } var multiplicator = Math.pow(10, digits); n = parseFloat((n * multiplicator).toFixed(11)); var test =(Math.round(n) / multiplicator); return +(test.toFixed(digits)); } 

वायुसेना का उदाहरण यहां देखें: https://jsfiddle.net/calder12/3Lbhfy5s/

4 संपादित करें – आप लोग मुझे मार रहे हैं 3 को संपादित करें नकारात्मक संख्याओं पर विफल रहता है, बिना खुदाई के कारण, गोल करने से पहले एक नकारात्मक संख्या को सकारात्मक रूप से बदलना आसान होता है, फिर परिणाम वापस करने से पहले इसे वापस बदल दिया जाता है।

 function roundTo(n, digits) { var negative = false; if (digits === undefined) { digits = 0; } if( n < 0) { negative = true; n = n * -1; } var multiplicator = Math.pow(10, digits); n = parseFloat((n * multiplicator).toFixed(11)); n = (Math.round(n) / multiplicator).toFixed(2); if( negative ) { n = (n * -1).toFixed(2); } return n; } 

बेला: https://jsfiddle.net/3Lbhfy5s/79/

अगर आप MDN पर दर्ज़ किए गए किसी स्ट्रिंग को किसी संख्या में कनवर्ट करने के लिए एक अनारी प्लस का उपयोग करते हैं

उदाहरण के लिए: +discount.toFixed(2)

फ़ंक्शन मैथरेड () और .toFixed () को निकटतम पूर्णांक पर गोल करना होता है और दशमलव के साथ काम करते समय आपको कुछ अवांछित त्रुटियां मिल सकती हैं, और मैथ। (या) के पैरामीटर के लिए "गुणा और विभाजित" विधि का उपयोग कर सकते हैं। .toFixed ()। उदाहरण के लिए, यदि आप मठ। (1.005 * 100) / 100 का उपयोग करके 1.005 गोल करने का प्रयास करते हैं, तो आपको 1.01 के सही उत्तर पाने के बजाय 1 .0 और 1.00 का उपयोग करके। फिक्स्ड (2) प्राप्त होगा।

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

 Number(Math.round(100 - (price / listprice) * 100 + 'e2') + 'e-2'); 

दो दशमलव स्थान प्राप्त करने के लिए। फिक्स (2) को जोड़ें, जिसे आप चाहते थे।

 Number(Math.round(100 - (price / listprice) * 100 + 'e2') + 'e-2').toFixed(2); 

आप एक फ़ंक्शन बना सकते हैं जो आपके लिए गोलाई को संभाल लेंगे:

 function round(value, decimals) { return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals); } 

उदाहरण: https://jsfiddle.net/k5tpq3pd/36/

alternativ

प्रोटोटाइप का उपयोग करके आप संख्या में एक गोल फ़ंक्शन जोड़ सकते हैं। मैं इसे जोड़ने का सुझाव नहीं देता। टॉफ़िक्स () यहां के रूप में यह नंबर की बजाय एक स्ट्रिंग लौटाएगा।

 Number.prototype.round = function(decimals) { return Number((Math.round(this + "e" + decimals) + "e-" + decimals)); } 

और इसे इस तरह प्रयोग करें:

 var numberToRound = 100 - (price / listprice) * 100; numberToRound.round(2); numberToRound.round(2).toFixed(2); //Converts it to string with two decimals 

उदाहरण https://jsfiddle.net/k5tpq3pd/35/

स्रोत: http://www.jacklmoore.com/notes/rounding-in-javascript/

दो दशमलव के साथ परिणाम प्राप्त करने के लिए, आप ऐसा कर सकते हैं:

 var discount = Math.round((100 - (price / listprice) * 100) * 100) / 100; 

गोल करने के लिए मान 100 से गुणा करके पहले दो अंकों को बनाए रखे, फिर वास्तविक परिणाम प्राप्त करने के लिए हम 100 से विभाजित करते हैं।

discount.toFixed(2); का उपयोग करने की कोशिश करें। टू discount.toFixed(2);

स्वीकृत उत्तर पर एक छोटे बदलाव। toFixed(2) स्ट्रिंग देता है, और आपको हमेशा दो दशमलव स्थान मिलेंगे। ये शून्य हो सकते हैं यदि आप अंतिम शून्य को दबाने चाहते हैं, तो बस ऐसा करें:

 var discount = + ((price / listprice).toFixed(2)); 

संपादित किया गया: मैंने फ़ायरफ़ॉक्स 35.0.1 में एक बग के बारे में पता लगाया है, जिसका मतलब है कि उपर्युक्त कुछ मानों के साथ NaN दे सकता है।
मैंने अपना कोड बदल दिया है

 var discount = Math.round(price / listprice * 100) / 100; 

यह दो दशमलव स्थानों तक एक नंबर देता है यदि आप तीन चाहते हैं, तो आप गुणा करेंगे और 1000 से विभाजित करेंगे, और इसी तरह।
ओपी हमेशा दो दशमलव स्थानों को चाहता है, लेकिन यदि फ़ॉफ़फॉल्ड में टूफिक्स () टूटा हुआ है तो उसे पहले फिक्सिंग की जरूरत है।
https://bugzilla.mozilla.org/show_bug.cgi?id=1134388 देखें

सबसे तेज़ तरीका – से फिक्स्ड ():

दो दशक

 x = .123456 result = Math.round(x * 100) / 100 // result .12 

तीन डेसीमिलल्स

 x = .123456 result = Math.round(x * 1000) / 1000 // result .123 

मैंने पाया सबसे अच्छा और सरल समाधान है

 function round(value, decimals) { return Number(Math.round(value+'e'+decimals)+'e-'+decimals); } round(1.005, 2); // 1.01 

संदर्भ: http://www.jacklmoore.com/notes/rounding-in-javascript/

मुझे लगता है कि मैंने देखा है कि सबसे अच्छा तरीका 10 अंकों की संख्या की संख्या से गुणा कर रहा है, फिर गणित के क्षेत्र में, फिर अंत में 10 अंकों की शक्ति को विभाजित किया जाता है। यहां एक सरल कार्य है जो मैं टाइपस्क्रिप्ट में उपयोग करता हूं:

 function roundToXDigits(value: number, digits: number) { value = value * Math.pow(10, digits); value = Math.round(value); value = value / Math.pow(10, digits); return value; } 

या सादा जावास्क्रिप्ट:

 function roundToXDigits(value, digits) { if(!digits){ digits = 2; } value = value * Math.pow(10, digits); value = Math.round(value); value = value / Math.pow(10, digits); return value; } 
  function round(num,dec) { num = Math.round(num+'e'+dec) return Number(num+'e-'+dec) } //Round to a decimal of your choosing: round(1.3453,2) 

किसी भी संख्या में दशमलव को स्थानांतरित करने के लिए, 2 लाइनों के साथ एक फ़ंक्शन, ज़्यादातर जरूरतों के लिए पर्याप्त होगा यहां खेलने के लिए कुछ नमूना कोड है

 var testNum = 134.9567654; var decPl = 2; var testRes = roundDec(testNum,decPl); alert (testNum + ' rounded to ' + decPl + ' decimal places is ' + testRes); function roundDec(nbr,dec_places){ var mult = Math.pow(10,dec_places); return Math.round(nbr * mult) / mult; } 
 function discoverOriginalPrice(discountedPrice, salePercentage) { var originalPrice = discountedPrice / (1 - (salePercentage * .01)); return +originalPrice.toFixed(2); } 

यहाँ एक काम उदाहरण है

 var value=200.2365455; result=Math.round(value*100)/100 //result will be 200.24