BigDecimal पर तुलना संचालकों जैसे>, =, <का उपयोग कैसे करें


103

मेरे पास एक डोमेन वर्ग है जिसमें UnitPrice बिगडेसिमल डेटा प्रकार के रूप में सेट है। अब मैं कीमत की तुलना करने के लिए एक विधि बनाने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि मैं बिगडीकल डेटा प्रकार में तुलना ऑपरेटर नहीं कर सकता। क्या मुझे डेटा प्रकार बदलना है या कोई अन्य तरीका है?


के बाद से BigDecimalएक है Object, कोई इस नहीं करता है काम करते हैं। लेकिन आप बस एक दूसरे से घटा सकते हैं और जांच सकते हैं कि परिणामी मूल्य क्या है <0, ==0या >0। अन्यथा आप BigDecimal
SomeJavaGuy

2
इसीलिए एक compareToविधि है जो -1, 0 या 1. लौटाती है जो मूल रूप से है Comparable
एम। दीनुम

जवाबों:


113

कक्षा की प्रत्येक वस्तु BigDecimalमें एक विधि होती है जिसका compareToउपयोग करके आप इसे किसी अन्य BigDecimal से तुलना कर सकते हैं। के परिणाम की compareToतुलना तब की जाती है > 0, == 0या< 0 आप की जरूरत पर निर्भर करता है। प्रलेखन पढ़ें और आपको पता चल जाएगा।

ऑपरेटरों ==, <, >और इतने पर ही की तरह आदिम डेटा प्रकार पर इस्तेमाल किया जा सकता int, long, doubleकी तरह या उनके आवरण वर्गों Integerऔर Double

के प्रलेखन से compareTo:

BigDecimalनिर्दिष्ट के साथ यह तुलना करता हैBigDecimal

दो BigDecimal वस्तुएं जो मूल्य में समान हैं, लेकिन एक अलग पैमाने हैं (जैसे 2.0 और 2.00) को इस विधि द्वारा बराबर माना जाता है। यह विधि छह बूलियन तुलना ऑपरेटरों (<, ==,>,> = =;! =, <=) में से प्रत्येक के लिए अलग-अलग तरीकों को प्राथमिकता में प्रदान की जाती है। इन तुलनाओं को करने के लिए सुझाया गया मुहावरा है: (x.compareTo(y) <op> 0)कहाँ<op> छह तुलनात्मक संचालकों में से एक है।

रिटर्न: -1, 0, या 1 के रूप में इस BigDecimal संख्यात्मक रूप से कम, बराबर, या घाटी से अधिक है।


1
लेकिन क्या यह तुलना विधि इस बात का पता लगाने में मदद करती है कि कीमत इससे अधिक है या नहीं के बराबर है?
user3127109 12

2
हाँ। वह जानकारी उत्तर में दिए गए लिंक में है।
ड्रू कैनेडी

4
@ user3127109 हाँ, a.compareTo(b)शून्य से अधिक संख्या देता है यदि a > b, 0यदि a == b, और यदि शून्य से कम है a < b
ज़ोल्टन

119

संक्षिप्त होना:

firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"    
firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="  
firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="    

22

compareToBigDecimal की विधि का उपयोग करें :

public int तुलना (BigDecimal val) इस BigDecimal की तुलना BigDecimal से करती है।

Returns:
-1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val.

12

आप नामित विधि का उपयोग कर सकते हैं compareTo, x.compareTo(y)। यह 0 होगा यदि x और y बराबर हैं, 1 यदि x y से बड़ा है और -1 यदि x y से छोटा है


11

यहाँ सभी छह बूलियन तुलना ऑपरेटरों (<, ==,>, = =;! =; <=) के लिए एक उदाहरण है।

BigDecimal big10 = new BigDecimal(10);
BigDecimal big20 = new BigDecimal(20);

System.out.println(big10.compareTo(big20) < -1);  // false
System.out.println(big10.compareTo(big20) <= -1); // true
System.out.println(big10.compareTo(big20) == -1); // true
System.out.println(big10.compareTo(big20) >= -1); // true
System.out.println(big10.compareTo(big20) > -1);  // false
System.out.println(big10.compareTo(big20) != -1); // false

System.out.println(big10.compareTo(big20) < 0);   // true
System.out.println(big10.compareTo(big20) <= 0);  // true
System.out.println(big10.compareTo(big20) == 0);  // false
System.out.println(big10.compareTo(big20) >= 0);  // false
System.out.println(big10.compareTo(big20) > 0);   // false
System.out.println(big10.compareTo(big20) != 0);  // true

System.out.println(big10.compareTo(big20) < 1);   // true
System.out.println(big10.compareTo(big20) <= 1);  // true
System.out.println(big10.compareTo(big20) == 1);  // false
System.out.println(big10.compareTo(big20) >= 1);  // false
System.out.println(big10.compareTo(big20) > 1);   // false
System.out.println(big10.compareTo(big20) != 1);  // true

5

BigDecimalएक आदिम नहीं है, इसलिए आप ऑपरेटरों <, >ऑपरेटरों का उपयोग नहीं कर सकते । हालांकि, चूंकि यह एक है Comparable, आप compareTo(BigDecimal)उसी प्रभाव का उपयोग कर सकते हैं । उदाहरण के लिए:

public class Domain {
    private BigDecimal unitPrice;

    public boolean isCheaperThan(BigDecimal other) {
        return unitPirce.compareTo(other.unitPrice) < 0;
    }

    // etc...
}

0

का उपयोग करते हुए com.ibm.etools.marshall.util.BigDecimalRange आईबीएम एक की कक्षा util अगर तुलना कर सकते हैं BigDecimal रेंज में।

boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);

0

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

  • new BigDecimal(0.8)BigDecimalएक मूल्य के साथ एक उदाहरण बनाएगा जो वास्तव में नहीं है0.8 और जिसमें 50+ का स्केल है,
  • new BigDecimal("0.8")एक बनाएगा BigDecimalएक मूल्य जिसके साथ उदाहरण है वास्तव में 0.8और जो 1 के पैमाने है

... और दोनों को BigDecimal.compareTo (BigDecimal) के अनुसार असमान माना जाएगा विधि के क्योंकि उनका मान असमान है जब पैमाना कुछ दशमलव स्थानों तक सीमित नहीं होता है।

सबसे पहले, कंस्ट्रक्टर के बजाय कंस्ट्रक्टर या विधि के BigDecimalसाथ अपने उदाहरण बनाने के लिए सावधान रहें । दूसरे, ध्यान दें कि आप BigDecimal.setScale (int newScale, RoundingMode roundingMode) विधि के माध्यम से उनकी तुलना करने से पहले BigDecimal उदाहरणों के पैमाने को सीमित कर सकते हैं ।BigDecimal(String val)BigDecimal.valueOf(double val)BigDecimal(double val)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.