2012-01-06 14 views
5

मुझे नहीं पता कि new BigDecimal("0E30") को कैसे संभालना है। इसका मान 0 है लेकिन यह BigDecimal.ZERO से तुलना नहीं करता है। नीचे देखें:0E30 शून्य नहीं है

System.out.println(new BigDecimal("0E30").add(BigDecimal.ONE));  // ---> 1 
System.out.println(new BigDecimal("0E30").equals(BigDecimal.ZERO)); // ---> false 

किसी की मदद कर सके मुझे तुलना सच (मैं जानता हूँ कि मैं double को BigDecimal रों परिवर्तित करके एक समाधान प्राप्त कर सकते हैं, लेकिन मुझे पता है कि क्या चल रहा है चाहते हैं) बनाने के लिए? मैं जेआरई 1.6.3 का उपयोग कर रहा हूं। धन्यवाद

उत्तर

7

docs से (जोर मेरा है):

समानता के लिए निर्दिष्ट ऑब्जेक्ट के साथ इस BigDecimal तुलना करता है। compareTo के विपरीत, इस विधि को केवल तभी बराबर दो BigDecimals वे बराबर हैं मूल्य में और पैमाने (2.00 करने के लिए इस प्रकार 2.0 बराबर नहीं है जब इस विधि द्वारा की तुलना में) समझता है।

इस मामले में, पैमाने से मेल नहीं खाता है। तो इसके बजाय, आपको compareTo() का उपयोग करना चाहिए।

BigDecimal मामलों में जहां equals()compareTo() के साथ असंगत है में से एक है:

नोट: यदि BigDecimals एक SortedMap में कुंजी या एक SortedSet में तत्व के रूप में इस्तेमाल किया जाएगा देखभाल प्रयोग किया जाना चाहिए, BigDecimal के प्राकृतिक रूप में ऑर्डरिंग के बराबर असंगत है। अधिक जानकारी के लिए तुलनात्मक, सॉर्टेड मैप या सॉर्टेडसेट देखें।

1
the docs से

:

public boolean equals(Object x) 

    Compares this BigDecimal with the specified Object for equality. 
    Unlike compareTo, this method considers two BigDecimal objects equal 
    only if they are equal in value and scale (thus 2.0 is not equal to 
    2.00 when compared by this method). 

आपका तराजू अलग हैं। यदि आप उन्हें बराबर तुलना करना चाहते हैं, तो compareTo का उपयोग करें।

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