Я пишу блок кода, который должен поддерживать как строки, так и числа, потому что Number может быть в представлении String (если строка преобразуется в число и затем сравнивается) при вводе чисел (AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double , Float, Integer, Long, Rational, Short и т. Д.).Как сравнить два `Number`s в Java?
Как я могу сравнить? случай 1: вход - целое число, ниже - Десятичный, верхняя - BigInteger
Случай 2: вход - с плавающей точкой, ниже - целое число, верхняя - Длинный
public boolean isNumberRange(final Object input, final Object lower, final Object upper){
boolean result = false;
final Number nInput = getNumber(input);
final Number nLower = getNumber(lower);
final Number nUpper = getNumber(upper);
if(nInput != null && nLower != null && nUpper != null)
{
Double dInput = nInput.doubleValue();
Double dLower = nLower.doubleValue();
Double dUpper = nUpper.doubleValue();
if(dLower <= dInput && dInput <= dUpper && dInput >= dLower){
result = true;
}
}
return result;
}
private Number getNumber(Object object) throws NumberFormatException{
if(object instanceof String){
final String sObject = object.toString();
if(NumberUtils.isNumber(sObject)) {
return NumberUtils.createNumber(sObject);
}
}
if(object instanceof Number){
return (Number) object;
}
else{
return null;
}
}
Здесь, в приведенном выше примере я am преобразование числа в Double и сравнение. Правильно ли это? Это адрес BigInteger и AtomicLong и т. Д., Пожалуйста, дайте мне знать. Спасибо
Что случилось с вашим текущим методом? –
посетите http://stackoverflow.com/questions/3214448/comparing-numbers-in-java?lq=1 –
@RakshithRavi Что не так, что он не компилируется. – EJP