У меня есть Java-приложение, которое анализирует число откуда-то и проверяет, является ли оно действительным int (между Integer.MIN_VALUE и Integer.MAX_VALUE) или допустимым double (между Double.MIN_VALUE и Double.MAX_VALUE).
Я использую этот код:
import java.math.BigDecimal;
import java.math.BigInteger;
public class Test {
public static final BigDecimal DOUBLE_MAX = BigDecimal.valueOf(Double.MAX_VALUE);
public static final BigDecimal DOUBLE_MIN = BigDecimal.valueOf(Double.MIN_VALUE);
public static final BigInteger INTEGER_MIN = BigInteger.valueOf(Integer.MIN_VALUE);
public static final BigInteger INTEGER_MAX = BigInteger.valueOf(Integer.MAX_VALUE);
private static boolean inRange(BigDecimal value) {
return DOUBLE_MAX.compareTo(value) >= 0 &&
DOUBLE_MIN.compareTo(value) <= 0;
}
private static boolean inRange(BigInteger value) {
return INTEGER_MAX.compareTo(value) >= 0 &&
INTEGER_MIN.compareTo(value) <= 0;
}
public static void main(String[] args)
{
System.out.println(inRange(new BigInteger("1234656")));
System.out.println(inRange(new BigInteger("0")));
System.out.println(inRange(new BigInteger("-987")));
System.out.println(inRange(new BigDecimal("1234656.0")));
System.out.println(inRange(new BigDecimal("0.0")));
System.out.println(inRange(new BigDecimal("-987.0")));
}
}
, который прекрасно работает для значений типа int, но по какой-то причине не работает для любого нулевого или отрицательного двойного значения.Таким образом, выполнение вышеуказанного приводит к выводу:
true
true
true
true
false
false
Что я здесь не так делаю?
Кроме того, я видел примеры, где DOUBLE_MIN имеет значение -Double.MAX_VALUE.Это работает, но верно ли это?
Спасибо.