Единственный способ правильно добавить любые два типа java.lang.Number:
Number a = 2f; // Foat
Number b = 3d; // Double
Number c = new BigDecimal( a.toString() ).add( new BigDecimal( b.toString() ) );
Это работает даже для двух аргументов с другим типом номера. Он будет (должен?) Не производить никаких побочных эффектов, таких как переполнение или потеря точности, поскольку toString () числового типа не снижает точность.