Вы говорите, что не знаете, являются ли ваши числа целыми или плавают ... когда вы используете класс Number
, компилятор также не знает, являются ли ваши числа целыми числами, плавающими или другими. В результате основные математические операторы, такие как + и - не работают; компьютер не знал, как обрабатывать значения.
START EDIT
Основываясь на обсуждении, я подумал, что пример может помочь. Компьютеры хранят числа с плавающей запятой как две части, коэффициент и показатель. Таким образом, в теоретической системе 001110 может быть разбит как 0011 10 или 32 = 9. Но положительные целые числа сохраняют числа как двоичные, поэтому 001110 также может означать 2 + 4 + 8 = 14. Когда вы используете класс Number
, вы сообщаете компьютеру, которого не знаете, является ли число float или int или что, поэтому он знает, что он имеет 001110, но он не знает, означает ли это 9 или 14 или какое-то другое значение.
END EDIT
Что вы можете сделать, так это сделать небольшое предположение и преобразовать в один из типов для математики. Таким образом, у вас может быть
Number c = a.intValue() + b.intValue();
, который вы также можете превратить в
Integer c = a.intValue() + b.intValue();
, если вы готовы перенести некоторую ошибку округления или
Float c = a.floatValue() + b.floatValue();
, если вы подозреваете, что не имеете дело с целыми числами, и все в порядке с возможными незначительными проблемами точности. Или, если вы предпочтете вместо этого ошибку небольшой удар,
BigDecimal c = new BigDecimal(a.floatValue()).add(new BigDecimal(b.floatValue()));