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




bigdecimal (5)

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

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


Answers

आमतौर पर आप "हाफ़ अप" राउंडिंग का उपयोग करेंगे, जैसे:

myBigDecimal.setScale(2, RoundingMode.HALF_UP);

इस तरह, आप दो दशमलव स्थानों (जो अधिकांश मुद्राओं का उपयोग करते हैं, जैसे डॉलर और सेंट, स्पष्ट रूप से अपवाद हैं) के लिए गोल होंगे, और आप ऐसे मानों को गोल करेंगे कि आधा प्रतिशत या उससे अधिक गोल हो जाएगा जबकि आधा प्रतिशत से कम होगा गोल हो जाएगा। अधिक विवरण के लिए javadoc देखें।


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


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

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


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

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

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

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

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


यहां पूर्णता के लिए जावा 9 समाधान है:

public static String toString(InputStream input) throws IOException {
    return new String(input.readAllBytes(), StandardCharsets.UTF_8);
}

readAllBytes वर्तमान में readAllBytes 9 मुख्य कोडबेस में है, इसलिए यह रिलीज में दिखाई देने की संभावना है। आप अभी जेडीके 9 स्नैपशॉट बिल्ड का उपयोग करके इसे आजमा सकते हैं।







java bigdecimal