2014-11-18 3 views
7

У меня есть BiGDecimal price, и мне нужно проверить, находится ли он в некотором диапазоне. Например должно быть 3 условия:Проверьте, находится ли значение BigDecimal в диапазоне

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

Как сделать это правильно, используя тип BigDecimal.

+4

Подсказка: используйте 'BigDecimal.compareTo', например, 'lowerBound.compareTo (value)' и 'upperBound.compareTo (значение)' –

+0

Мне кажется, что «BigInteger» мне ... – Betlista

ответ

11

Это достижимо с использованием метода .compareTo(). Например:

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

Цитирование (и перефразирование) от JavaDoc:

Предложенная идиомы для выполнения этих сравнений является: (x.compareTo (у) оп 0), где оп является один из шести операторов сравнения [(<, ==,>,> =,! =, < =)]

Приветствия,

1

Используйте BigDecimal.compareTo(val), чтобы сравнить, если ваш номер больше, меньше или равен.

возвращает -1, 0 или 1, так как этот BigDecimal численно меньше, равен или больше 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, но если мне нужно проверить, что значение больше и меньше, чем в то же время – user3127896

+3

@ user3127896 используйте его дважды, то –

+0

Не используйте 'new BigDecimal (0)' вместо этого используйте 'BigDecimal.ZERO' –

1

Способ применения CompareTo

java.math.BigDecimal.compareTo (BigDecimal вал)

Этот метод возвращает -1, если BigDecimal меньше Валу, 1, если BigDecimal больше, чем val и 0, если BigDecimal равен val

6

Нет обходного пути к этому i thi пк. В конце концов вы можете превратить его в красивый шаблон дизайна, но BigDecimal имеет только один метод для сравнения.

Моя идея заключается в том, чтобы извлечь способ диапазона:

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

Ваш код будет чище, но есть if-s underneeth. – Beri

+0

Параметры, не используемые в методе? 'start',' end' ... – Betlista

+0

Я бы добавил цену! = null, чтобы избежать NPE и> =, <= если интервал закрыт –

1

Вы можете сделать sthg как это;

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); 
} 
} 

ресурс: http://www.tutorialspoint.com/java/math/bigdecimal_compareto.htm

0

Используйте метод сигнум из BigDecimal класса:

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

Позволяет сделать его родовое:

public static <T extends Comparable<T>> boolean isBetween(T value, T start, T end) { 
    return value.compareTo(start) >= 0 && value.compareTo(end) <= 0; 
} 
Смежные вопросы