जावा में किसी संख्या को दशमलव के बाद N अंकों तक कैसे पूर्णांकित करें? उदाहरणों के साथ पूर्ण विश्लेषण
\n\nसंख्याओं का पूर्णांकन उन कार्यों में से एक है, जिसका सामना हर Java-डेवलपर करता है, चाहे वह कोई नौसिखिया हो जो कंसोल में मूल्य प्रदर्शित कर रहा हो, या कोई अनुभवी इंजीनियर जो वित्तीय गणनाओं पर काम कर रहा हो। यह कितना आसान हो सकता है? लेकिन व्यवहार में जावा double पूर्णांकन में कई छिपी हुई समस्याएं हैं: सटीकता की 'जादुई' त्रुटियों से लेकर किसी विशिष्ट कार्य के लिए सही उपकरण चुनने तक।
\n\nइस लेख में, हम सभी मुख्य तरीकों पर चर्चा करेंगे कि कैसे जावा में किसी संख्या को पूर्णांकित करके दशमलव के बाद निर्धारित अंकों तक लाया जाए। आप जानेंगे कि Math.round का उपयोग कब करना है, वित्तीय गणनाओं में Double कितना खतरनाक है, और क्यों BigDecimal आपका सबसे अच्छा दोस्त है जब पैसे की बात आती है। चलिए शुरू करते हैं!
समस्या: जावा में सरल पूर्णांकन हमेशा सरल क्यों नहीं होता?
\n\nसमाधानों पर जाने से पहले, आइए समस्या की जड़ को समझें। जावा में double प्रकार (अधिकांश भाषाओं की तरह) फ्लोटिंग-पॉइंट संख्याओं को बाइनरी प्रारूप में संग्रहीत करता है। इस वजह से, कई दशमलव भिन्न (जैसे, 0.1 या 0.2) को सटीक रूप से प्रस्तुत नहीं किया जा सकता है। इसे आज़माएं:
System.out.println(0.1 + 0.2); // आउटपुट 0.30000000000000004\n\nस्क्रीन पर प्रदर्शित करने के लिए यह गंभीर नहीं हो सकता है, लेकिन गणनाओं के लिए यह आपदा है। इसलिए जावा में 2 अंकों तक पूर्णांकन (या किसी भी अन्य संख्या) को सोच-समझकर किया जाना चाहिए।
\n\nविधि 1: Math.round के माध्यम से गणितीय पूर्णांकन
\n\nसबसे सीधा तरीका Math.round() का उपयोग करना है। यह संख्या को निकटतम पूर्णांक में पूर्णांकित करता है। N अंक प्राप्त करने के लिए, हम दशमलव बिंदु को 'स्थानांतरित' करते हैं, पूर्णांकित करते हैं, और फिर वापस स्थानांतरित करते हैं।
उदाहरण: double को दशमलव के बाद 2 अंकों तक पूर्णांकित करना:
\n\npublic static double roundWithMathRound(double value, int places) {\n double scale = Math.pow(10, places);\n return Math.round(value * scale) / scale;\n}\n\n// उपयोग\ndouble number = 3.14159265;\ndouble rounded = roundWithMathRound(number, 2);\nSystem.out.println(rounded); // 3.14\n\nलाभ: सरलता, बाहरी लाइब्रेरी पर कोई निर्भरता नहीं।
\nनुकसान: double के साथ काम करता है, इसलिए सीमा मानों पर सटीकता की त्रुटियों के अधीन है। वित्त के लिए उपयुक्त नहीं।
विधि 2: DecimalFormat के साथ स्वरूपण
\n\njava.text पैकेज का DecimalFormat वर्ग न केवल पूर्णांकित करने की अनुमति देता है, बल्कि संख्या को एक स्ट्रिंग में खूबसूरती से प्रारूपित करने की भी अनुमति देता है। यह UI और रिपोर्ट के लिए आदर्श विकल्प है।
import java.text.DecimalFormat;\n\npublic static String formatWithDecimalFormat(double value, int places) {\n // टेम्पलेट बनाएं: दो अंकों के लिए #.00\n StringBuilder pattern = new StringBuilder("#.");\n for (int i = 0; i < places; i++) {\n pattern.append("0");\n }\n DecimalFormat df = new DecimalFormat(pattern.toString());\n return df.format(value);\n}\n\n// उपयोग\nString result = formatWithDecimalFormat(2.71828, 3);\nSystem.out.println(result); // 2.718\n\nआप पूर्णांकन मोड (RoundingMode) भी सेट कर सकते हैं:
df.setRoundingMode(RoundingMode.HALF_UP); // मानक गणितीय पूर्णांकन\n\nमहत्वपूर्ण: DecimalFormat एक String लौटाता है, संख्या नहीं। यदि आपको आगे की गणनाओं के लिए double चाहिए, तो यह विधि उपयुक्त नहीं है।
विधि 3: BigDecimal — सटीकता का स्वर्ण मानक
\n\nजब सटीकता महत्वपूर्ण हो (वित्त, वैज्ञानिक गणनाएं), तो BigDecimal दृश्य पर आता है। यह प्रत्येक अंक को नियंत्रित करने और double की त्रुटियों से बचने की अनुमति देता है।
import java.math.BigDecimal;\nimport java.math.RoundingMode;\n\npublic static BigDecimal roundWithBigDecimal(double value, int places) {\