@jatan
आपके उत्तर के लिए धन्यवाद। यह समझ में आता है। क्या आप कृपया BigDecimal # राउंड विधि के संदर्भ में MathContext को समझा सकते हैं।
BigDecimal.round()
बनाम किसी अन्य BigDecimal
विधि के बारे में कुछ खास नहीं है। सभी मामलों में, MathContext
महत्वपूर्ण अंकों और गोल करने वाली तकनीक की संख्या निर्दिष्ट करता है। असल में, प्रत्येक के दो भाग हैं MathContext
। एक परिशुद्धता है, और एक RoundingMode
।
परिशुद्धता फिर से महत्वपूर्ण अंकों की संख्या निर्दिष्ट करता है। इसलिए यदि आप किसी संख्या के रूप में 123
निर्दिष्ट करते हैं, और 2 महत्वपूर्ण अंक मांगते हैं, तो आपको 120
प्राप्त होगा। यदि आप वैज्ञानिक नोटेशन के संदर्भ में सोचते हैं तो यह स्पष्ट हो सकता है।
123
would be 1.23e2
in scientific notation. If you only keep 2 significant digits, then you get 1.2e2
, or 120
. By reducing the number of significant digits, we reduce the precision with which we can specify a number.
RoundingMode
भाग निर्दिष्ट करता है कि हमें परिशुद्धता के नुकसान को कैसे संभालना चाहिए। उदाहरण का पुन: उपयोग करने के लिए, यदि आप संख्या के रूप में 123
का उपयोग करते हैं, और 2 महत्वपूर्ण अंकों के लिए पूछते हैं, तो आपने अपनी परिशुद्धता कम कर दी है। HALF_UP
(डिफ़ॉल्ट मोड) के RoundingMode
के साथ, 123
120
बन जाएगा। CEILING
के RoundingMode
के साथ, आपको 130
मिल जाएगा।
उदाहरण के लिए:
System.out.println(new BigDecimal("123.4",
new MathContext(4,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.CEILING)));
System.out.println(new BigDecimal("123.4",
new MathContext(1,RoundingMode.CEILING)));
आउटपुट:
123.4
1.2E+2
1.3E+2
2E+2
आप देख सकते हैं कि सटीकता और गोल दोनों मोड आउटपुट को प्रभावित करते हैं।