gcc: неопределенная ссылка на

Вы говорите, что не знаете, являются ли ваши числа целыми или плавают ... когда вы используете класс 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()));
38
задан alk 26 September 2015 в 06:46
поделиться