2014-11-18 19 views
7

Tôi có BiGDecimal price và tôi cần kiểm tra xem nó có nằm trong phạm vi nào đó không. Ví dụ: phải có 3 điều kiện:Kiểm tra xem giá trị BigDecimal có nằm trong phạm vi

if (price >= 0 and price <=500) { 
    .... 
} else if (price >=500 && price <=1000) { 
    .... 
} else if (price > 1000) { 
    .... 
} 

Làm thế nào để sử dụng đúng loại BigDecimal.

+4

Gợi ý: sử dụng 'BigDecimal.compareTo', ví dụ 'lowerBound.compareTo (giá trị)' và 'upperBound.compareTo (giá trị)' –

+0

Có vẻ như 'BigInteger' với tôi ... – Betlista

Trả lời

11

Đó là có thể đạt được bằng cách sử dụng phương pháp .compareTo(). Ví dụ:

if (price.compareTo(BigDecimal.valueOf(500) > 0 
    && price.compareTo(BigDecimal.valueOf(1000) < 0) { 
    // price is larger than 500 and less than 1000 
    ... 
} 

Trích dẫn (và diễn giải) từ javadoc:

Các thành ngữ gợi ý để thực hiện những so sánh này là: (x.compareTo (y) op 0), nơi op là một trong sáu nhà khai thác so [(<, ==,>,> =,! =, = <)]

Chúc mừng,

1

Sử dụng BigDecimal.compareTo(val) để so sánh nếu Số của bạn lớn hơn, nhỏ hơn hoặc bằng nhau.

trả về -1, 0 hoặc 1 vì BigDecimal này nhỏ hơn, bằng hoặc lớn hơn val.

if (price.compareTo(BigDecimal.ZERO) >= 0 && 
    price.compareTo(new BigDecimal(500)) <= 0) { 
    .... 
} else if (price.compareTo(new BigDecimal(500)) >= 0 && 
      price.compareTo(new BigDecimal(1000)) <= 0) { 
    .... 
} else if (price.compareTo(price.compareTo(new BigDecimal(1000)) < 0) { 
    .... 
} 
+0

ok nhưng nếu tôi cần phải kiểm tra xem giá trị nhiều hơn và ít hơn cùng một lúc – user3127896

+3

@ user3127896 sử dụng nó hai lần thì –

+0

Không sử dụng 'BigDecimal mới (0)' thay vì sử dụng 'BigDecimal.ZERO' –

1

phương pháp sử dụng compareTo

java.math.BigDecimal.compareTo (BigDecimal val)

Phương pháp này trả về -1 nếu BigDecimal là ít hơn val, 1 nếu BigDecimal lớn hơn val và 0 nếu BigDecimal bằng val

6

Không có giải pháp nào cho điều này tôi thi nk. Cuối cùng bạn có thể bọc nó thành một mẫu thiết kế đẹp, nhưng BigDecimal chỉ có một phương pháp để so sánh.

Ý tưởng của tôi là để trích xuất một phương pháp để khoảng:

boolean isBetween(BigDecimal price, BigDecimal start, BigDecimal end){ 
    return price.compareTo(start) > 0 && price.compareTo(end) < 0; 
} 
+0

Mã của bạn sẽ sạch sẽ hơn, nhưng có các if-s underneeth. – Beri

+0

Có tham số không được sử dụng trong phương pháp? 'start',' end' ... – Betlista

+0

Tôi sẽ thêm giá! = null để tránh NPE và> =, <= nếu khoảng thời gian đóng –

1

Bạn có thể làm sthg như thế này;

public class BigDecimalDemo { 

    public static void main(String[] args) { 

    // create 2 BigDecimal objects 
    BigDecimal bg1, bg2; 

    bg1 = new BigDecimal("10"); 
    bg2 = new BigDecimal("20"); 

    //create int object 
    int res; 

    res = bg1.compareTo(bg2); // compare bg1 with bg2 

    String str1 = "Both values are equal "; 
    String str2 = "First Value is greater "; 
    String str3 = "Second value is greater"; 

    if(res == 0) 
     System.out.println(str1); 
    else if(res == 1) 
     System.out.println(str2); 
    else if(res == -1) 
    System.out.println(str3); 
} 
} 

tài nguyên: http://www.tutorialspoint.com/java/math/bigdecimal_compareto.htm

0

Sử dụng phương pháp signum từ BigDecimal lớp:

private static boolean isBetween(BigDecimal amount, BigDecimal init, BigDecimal end) { 
    return amount.subtract(init).signum() >= 0 && amount.subtract(end).signum() <= 0; 
} 
4

Hãy làm cho nó chung chung:

public static <T extends Comparable<T>> boolean isBetween(T value, T start, T end) { 
    return value.compareTo(start) >= 0 && value.compareTo(end) <= 0; 
} 
Các vấn đề liên quan