java - जावा में मुद्रा हेरफेर के लिए किस राउंडिंग मोड का उपयोग किया जाना है?




bigdecimal (4)

मैंने मुद्राओं के लिए BigDecimal का उपयोग करने के लिए जावा साइट पर पढ़ा है। http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

लेकिन हमें किस राउंडिंग मोड का उपयोग करना चाहिए? जो हमारे लिए सबसे उपयुक्त है और सबसे व्यापक रूप से


अधिकांश समय BigDecimal मुद्राओं के लिए एकमात्र वैध विकल्प है। लेकिन गोलाई रणनीति का विकल्प स्पष्ट नहीं है।

डिफ़ॉल्ट HALF_EVEN जो एक अच्छा विकल्प है। इस एल्गोरिथ्म को बैंकरों की गोलाई के रूप में जाना जाता है ( here चर्चा देखें)।

एक और आम रणनीति HALF_UP जो अधिक सहज है, लेकिन इसमें सांख्यिकीय रूप से थोड़ा खराब है।

यह भी ध्यान दें कि कई बार (विशेष रूप से बैंकिंग और बीमा में) राउंडिंग रणनीति को व्यावसायिक आवश्यकताओं द्वारा निर्धारित किया जाएगा, जो अक्सर विभिन्न उपयोग के मामलों के लिए अलग-अलग होते हैं।


आपको कभी भी मुद्राओं के लिए दशमलव प्रकार का उपयोग नहीं करना चाहिए। पूर्णांक प्रकार का उपयोग करें। यह सटीकता को बनाए रखता है ताकि फ्लोट्स से जुड़ी गोलाई त्रुटि से बचा जा सके

जब एक राशि प्रदर्शित करते हैं तो गैर-अभिन्न अंग प्राप्त करने के लिए उपयुक्त कारक से विभाजित करते हैं।


कोई "सही" मोड नहीं है, यह व्यवसाय के मामले पर निर्भर करता है। उदाहरण:

  • वार्षिक करों की गणना करते समय, भिन्नों को अक्सर काट दिया जाता है ( RoundingMode.FLOOR )।
  • बोनस की गणना करते समय, आप हमेशा ग्राहक के पक्ष में गोल कर सकते हैं ( RoundingMode.CEILING )।
  • किसी बिल पर करों के लिए, आप आमतौर पर HALF_UP दौर HALF_UP
  • जटिल वित्तीय सिमुलेशन करते समय, आप बिल्कुल भी गोल नहीं करना चाहते हैं।

राउंडिंगमोड के प्रलेखन में बहुत सारे उदाहरण हैं कि विभिन्न मोड कैसे काम करते हैं।

बेहतर उत्तर पाने के लिए, आपको हमें बताना होगा कि आप क्या हासिल करना चाहते हैं।

उस ने कहा, BigDecimal जावा में उपयोग करने के लिए सही प्रकार है क्योंकि यह किसी भी मात्रा में परिशुद्धता को संरक्षित कर सकता है और साथ ही इससे आपने राउंडिंग मोड को अपने मामले के लिए सबसे उपयुक्त चुना है।


वित्तीय अनुप्रयोगों के लिए ROUND_HALF_EVEN सबसे आम राउंडिंग मोड है। वह विधा पूर्वाग्रह से बचती है। लेकिन प्रदर्शन के लिए आपको नंबरफ़ॉर्मैट क्लास का उपयोग करना चाहिए। यह वर्ग विभिन्न मुद्राओं में राशियों के लिए स्थानीयकरण के मुद्दों का ध्यान रखेगा। लेकिन NumberFormat केवल प्राथमिकताओं को स्वीकार करता है। इसलिए पिछले एक का उपयोग करें यदि आप परिवर्तनों को छोटे सटीकता परिवर्तन को दोहरे में स्वीकार कर सकते हैं।





bigdecimal