2009-10-22 15 views
5

में एक बड़े दशमलव का प्रतिनिधित्व करने के लिए कौन सा डेटा प्रकार "10364055.81" जैसे दशमलव संख्या का प्रतिनिधित्व करने के लिए उपयुक्त है।डेटा प्रकार जावा

तो डबल उपयोग करने की कोशिश:

double d = 10364055.81; 

लेकिन जब मैं संख्या मुद्रित करने के लिए प्रयास करते हैं, इसकी के रूप में "1.036405581E7", है जो मैं नहीं चाहता प्रदर्शित।

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

बीटीडब्ल्यू, बिगडिसीमल प्रभाव का उपयोग अनुप्रयोग के प्रदर्शन का उपयोग करेगा ?? मैं इसे लगभग अपने सभी डीटीओ में उपयोग कर सकता हूं।

उत्तर

17

आप BigDecimal का उपयोग करना चाहिए - लेकिन स्ट्रिंग निर्माता, जैसे का उपयोग करें:

new BigDecimal("10364055.81"); 

आप BigDecimal करने के लिए एक double पार कर लेते हैं, जावा बनाना होगा कि डबल पहले - और के बाद से युगल सबसे दशमलव प्रतिनिधित्व नहीं कर सकते भिन्नताएं, 10364055.81000000052154064178466796875 और के रूप में मान बनाएं तो इसे बिगडिसीमल कन्स्ट्रक्टर में पास कर देता है। इस मामले में बिगडेसिमल को यह जानने का कोई तरीका नहीं है कि आप वास्तव में राउंडर संस्करण का मतलब है।

आम तौर पर बिगडिसीमल के गैर-स्ट्रिंग कन्स्ट्रक्टर का उपयोग करके एक चेतावनी माना जाना चाहिए कि आपको कक्षा का पूर्ण लाभ नहीं मिल रहा है।

संपादित करें - जो भी आप करना चाहते थे उसे फिर से पढ़ने के आधार पर, मेरा प्रारंभिक दावा शायद बहुत मजबूत है। BigDecimal एक अच्छा विकल्प है जब आपको दशमलव मानों का सटीक रूप से प्रतिनिधित्व करने की आवश्यकता होती है (उदाहरण के लिए मनी हैंडलिंग स्पष्ट विकल्प है, उदाहरण के लिए आप 5.99 * एक मिलियन 5990016.45 नहीं चाहते हैं।

लेकिन यदि आप आंतरिक रूप से को संग्रहीत दशमलव अक्षर के लिए बहुत ही कम मूल्य के रूप में संग्रहीत किए जाने वाले नंबर के बारे में चिंतित नहीं हैं, और बस उसी प्रारूप में इसे फिर से मुद्रित करना चाहते हैं, तो जैसा कि अन्य ने कहा है , NumberFormat का एक उदाहरण (इस मामले में, new DecimalFormat("########.##")) डबल अच्छी तरह से आउटपुट करने के लिए चाल करेगा, या String.format वही काम कर सकता है।

प्रदर्शन के लिए - BigDecimals स्वाभाविक रूप से primitives का उपयोग करने से धीमे हो जाएगा। आमतौर पर, हालांकि, जब तक आपके कार्यक्रम के विशाल बहुमत में गणितीय जोड़-विमर्श शामिल नहीं होता है, तब तक आपको वास्तव में किसी भी गति अंतर की संभावना नहीं है। यह कहना नहीं है कि आपको बिगडेसिमल का उपयोग करना चाहिए; बल्कि, अगर आप उनकी विशेषताओं से वास्तविक लाभ प्राप्त कर सकते हैं जो सादा doubles के साथ साकार करना मुश्किल या असंभव होगा, तो वे सैद्धांतिक रूप से पेश किए गए मिनीस्कूल प्रदर्शन अंतर को पसीना न करें।

+0

की शुद्धता के साथ एक डबल मतलब है, मुझे लगता है कि तुम सही हो। लेकिन उस संख्या के लिए एक डबल डेटा प्रकार पर्याप्त होना चाहिए (केवल दो दशमलव)। बिगडिसीमल का उपयोग करना जहां कुछ दोगुना पर्याप्त होता है, कुछ संचालन करते समय कम प्रदर्शन कर सकता है। – sinuhepop

3

कैसे एक नंबर प्रदर्शित किया जाता है अलग कैसे संख्या संग्रहीत किया जाता है से है।

DecimalFormat पर एक नज़र डालें, यह नियंत्रित करने के लिए कि आप अपनी संख्या को डबल (या फ्लोट इत्यादि) कैसे प्रदर्शित कर सकते हैं।

ध्यान दें कि बिगडेसिमल को डबल (या इसके विपरीत) में चुनने से पेशेवर/विपक्ष होते हैं, और आपकी आवश्यकताओं पर निर्भर करेंगे। अधिक जानकारी के लिए here देखें। सारांश से:

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

1

इस नंबर को सहेजने के लिए एक डबल पर्याप्त होगा। यदि आपकी समस्या यह है कि प्रिंटिंग या स्ट्रिंग में डालने पर आपको प्रारूप पसंद नहीं है, तो आप नंबरफॉर्मैट का उपयोग कर सकते हैं: http://java.sun.com/javase/6/docs/api/java/text/NumberFormat.html

1

आप सिस्टम का उपयोग कर सकते हैं और System.out.printf() के साथ प्रदर्शित कर सकते हैं।

double d = 100003.81; 
System.out.printf("%.10f", d); 

.10f - अच्छी तरह से 10

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