2010-07-20 9 views
5

मेरे पास अज्ञात लंबाई के साथ BigDecimal ऑब्जेक्ट, myNumber है। उदाहरण के लिए: 12345678वैज्ञानिक नोटेशन के बजाए हमेशा पूर्ण दशमलव प्रारूप में BigDecimal ऑब्जेक्ट को कैसे प्रदर्शित करें?

मैं हमेशा 1 लाख से इस संख्या में विभाजित करना चाहते हैं, तो मैं कार्य करें:

myNumber.divide(BigDecimal.valueOf(1000000)) 

मैं 12.345678.

मिल मैं एक स्ट्रिंग "12.345678" के रूप में इस प्रदर्शित करना चाहते हैं, किसी भी दशमलव काट के बिना स्थानों।

तो मैं

myNumber.divide(BigDecimal.valueOf(1000000)).toString() 

यह ऊपर के उदाहरण के साथ ठीक काम करता है है। लेकिन अगर myNumber कुछ हास्यास्पद छोटे या बड़े, इस तरह के रूप में है:

0.00000001 

एक लाख से 0.00000001 विभाजित और स्ट्रिंग में कनवर्ट करने के बाद, यह वैज्ञानिक संकेतन के रूप में प्रदर्शित करता है, जो कि मैं क्या नहीं करना चाहता। मैं हमेशा पूर्ण दशमलव प्रारूप में प्रदर्शित करना चाहता हूं (इस मामले में, 0.00000000000001)।

कोई विचार?

+0

संभावित डुप्लिकेट [जावा बिगडेसिमल 1E + 1 क्यों लौटाता है?] (Http://stackoverflow.com/questions/925232/why-does-java-bigdecimal-return-1e1) – polygenelubricants

उत्तर

3

आपको divide() के संस्करण का उपयोग करके विभाजन करना है जिसमें एक गोलाकार मोड और स्केल शामिल है, और सभी आंशिक अंकों को शामिल करने के लिए पर्याप्त पैमाने को सेट करें।

int s = myNumber.scale(); 
BigDecimal result = myNumber.divide(BigDecimal.valueOf(1000000), s+6, RoundingMode.UNNECESSARY); 

फिर प्रारूप के लिए toPlainString() का उपयोग करें।

2

मुझे लगता है कि BigDecimal.toPlainString() वह विधि है जिसकी आपको आवश्यकता है। हालांकि, ध्यान दें कि विभाजन स्वयं एक अपवाद फेंक देगा जब दशमलव प्रतिनिधित्व अनंत है, जैसे कि 1/3।

+0

क्या आप इसका उदाहरण दे सकते हैं 'toString()' अपवाद नहीं फेंकता है और 'toPlainString() 'करता है? – polygenelubricants

+2

@ पोलिजेनेलब्रिकेंट्स: यह मेरी गलती थी, मैंने प्रतिक्रिया तय की। विभाजित करते समय अंकगणित अपवाद होता है। एक BigDecimal अनंत दशमलव प्रतिनिधित्व संभाल नहीं कर सकता है। –

+1

हां, मैंने उस प्रश्न को stackoverflow पर पूछा =) http://stackoverflow.com/questions/2749375/arithmeticexception-thrown-during-bigdecimal-divide – polygenelubricants

0

आप BigDecimal.toPlainString() का उपयोग कर सकते हैं "इस BigDecimal का एक स्ट्रिंग प्रस्तुति बिना किसी एक्सपोनेंट फ़ील्ड के"।

दूसरी ओर वैज्ञानिक नोटेशन BigDecimal.toEngineeringString() द्वारा वापस किया गया है।

1

BigDecimal.toString या toPlainString मदद करेगा।

संबंधित मुद्दे

 संबंधित मुद्दे