Вы говорите, что не знаете, являются ли ваши числа целыми или плавающими ... когда вы используете класс Number
, компилятор также не знает, являются ли ваши числа целыми числами, числами с плавающей запятой или чем-то другим. В результате основные математические операторы, такие как + и -, не работают; компьютер не знает, как обрабатывать значения.
НАЧАТЬ РЕДАКТИРОВАТЬ
Основываясь на обсуждении, я подумал, что пример может помочь. Компьютеры хранят числа с плавающей запятой как две части: коэффициент и показатель степени. Так, в теоретической системе 001110 может быть разбит на 0011 10 или 3 2 = 9. Но положительные целые числа хранят числа в двоичном виде, поэтому 001110 также может означать 2 + 4 + 8 = 14. Когда вы используете класс Number
, вы говорите компьютеру, что не знаете, является ли число числом с плавающей запятой или целым или каким-то другим, поэтому он знает, что у него есть 001110, но не знает, означает ли это 9 или 14 или какое-то другое значение.
КОНЕЦ РЕДАКТИРОВАНИЯ
Что вы можете сделать, это сделать небольшое предположение и перейти к одному из типов, чтобы сделать математику. Таким образом, вы могли бы иметь
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()));