How to use comparison operators like >, =, < on BigDecimal

后端 未结 8 1181
清酒与你
清酒与你 2021-01-30 11:54

I have a domain class with unitPrice set as BigDecimal data type. Now I am trying to create a method to compare price but it seems like I can\'t have comparison operators in Big

相关标签:
8条回答
  • 2021-01-30 12:38

    Use the compareTo method of BigDecimal :

    public int compareTo(BigDecimal val) Compares this BigDecimal with the specified BigDecimal.

    Returns:
    -1, 0, or 1 as this BigDecimal is numerically less than, equal to, or greater than val.
    
    0 讨论(0)
  • 2021-01-30 12:45

    Using com.ibm.etools.marshall.util.BigDecimalRange util class of IBM one can compare if BigDecimal in range.

    boolean isCalculatedSumInRange = BigDecimalRange.isInRange(low, high, calculatedSum);
    
    0 讨论(0)
  • 2021-01-30 12:48

    To be short:

    firstBigDecimal.compareTo(secondBigDecimal) < 0 // "<"
    firstBigDecimal.compareTo(secondBigDecimal) > 0 // ">"    
    firstBigDecimal.compareTo(secondBigDecimal) == 0 // "=="  
    firstBigDecimal.compareTo(secondBigDecimal) >= 0 // ">="    
    
    0 讨论(0)
  • 2021-01-30 12:50

    BigDecimal isn't a primitive, so you cannot use the <, > operators. However, since it's a Comparable, you can use the compareTo(BigDecimal) to the same effect. E.g.:

    public class Domain {
        private BigDecimal unitPrice;
    
        public boolean isCheaperThan(BigDecimal other) {
            return unitPirce.compareTo(other.unitPrice) < 0;
        }
    
        // etc...
    }
    
    0 讨论(0)
  • 2021-01-30 12:51

    Every object of the Class BigDecimal has a method compareTo you can use to compare it to another BigDecimal. The result of compareTo is then compared > 0, == 0 or < 0 depending on what you need. Read the documentation and you will find out.

    The operators ==, <, > and so on can only be used on primitive data types like int, long, double or their wrapper classes like Integerand Double.

    From the documentation of compareTo:

    Compares this BigDecimal with the specified BigDecimal.

    Two BigDecimal objects that are equal in value but have a different scale (like 2.0 and 2.00) are considered equal by this method. This method is provided in preference to individual methods for each of the six boolean comparison operators (<, ==, >, >=, !=, <=). The suggested idiom for performing these comparisons is: (x.compareTo(y) <op> 0), where <op> is one of the six comparison operators.

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

    0 讨论(0)
  • 2021-01-30 13:00

    You can use method named compareTo, x.compareTo(y). It will return 0 if x and y are equal, 1 if x is greater than y and -1 if x is smaller than y

    0 讨论(0)
提交回复
热议问题