वे दो अलग-अलग प्रश्न हैं: "मुझे किसके लिए उपयोग करना चाहिए BigDecimal
?" और "मैं सामान्य रूप से क्या करूँ?"
के लिए BigDecimal
: यह थोड़ा मुश्किल है, क्योंकि वे एक ही काम नहीं करते हैं । वस्तु को तात्कालिक करने के लिए पारित मूल्य BigDecimal.valueOf(double)
के विहित String
प्रतिनिधित्व का उपयोग करेगा । दूसरे शब्दों में: वस्तु का मूल्य वही होगा जो आप देखते हैं ।double
BigDecimal
BigDecimal
System.out.println(d)
यदि आप new BigDecimal(d)
फिर भी उपयोग करते हैं , तो यथासंभव मूल्य का सहीBigDecimal
प्रतिनिधित्व करने का प्रयास करेंगे । यह आमतौर पर बहुत अधिक अंकों में संग्रहीत किया जाएगा जो आप चाहते हैं। कड़ाई से बोलना, यह अधिक सही है , लेकिन यह बहुत कम सहज है।double
valueOf()
JavaDoc में इसका एक अच्छा विवरण है:
इस निर्माता के परिणाम कुछ अप्रत्याशित हो सकते हैं। कोई यह मान सकता है कि new BigDecimal(0.1)
जावा में लिखना एक ऐसा है BigDecimal
जो 0.1 के बराबर है (1 का एक बिना मूल्य का मान, 1 के पैमाने के साथ), लेकिन यह वास्तव में 0.100000000000000005551115123125782702118158404041015625 के बराबर है। ऐसा इसलिए है क्योंकि 0.1 का प्रतिनिधित्व बिल्कुल नहीं किया जा सकता है double
(या, उस मामले के लिए, किसी भी परिमित लंबाई के बाइनरी अंश के रूप में)। इस प्रकार, जो मान कंस्ट्रक्टर में पास किया जा रहा है, वह 0.1 के बराबर नहीं है, इसके बावजूद उपस्थिति नहीं है।
सामान्य तौर पर, यदि परिणाम समान है (यानी के मामले में नहीं BigDecimal
, लेकिन अधिकांश अन्य मामलों में), तो valueOf()
प्राथमिकता दी जानी चाहिए: यह सामान्य मूल्यों की कैशिंग कर सकता है (जैसा कि देखा गया है Integer.valueOf()
) और यह बिना कैशिंग व्यवहार को भी बदल सकता है फोन करने वाले को बदलना होगा। हमेशा एक नया मान तुरंत new
होगा , भले ही आवश्यक न हो (सर्वोत्तम उदाहरण: बनाम )।new Boolean(true)
Boolean.valueOf(true)