Числа (независимо от того, что это - BigDecima, Float, Long) предназначены для хранения значений (наиболее точных), а не их представления String. Вы не можете «сохранить отформатированное значение» как число и ожидать, что оно будет представлено таким образом все время. Каждый раз, когда вы хотите отформатировать значение, вы должны отформатировать его.
так вот
BigDecimal a = new BigDecimal(format(d, 2));
вы просто создаете новый BigDecimal, используя некоторое отформатированное число, которое является строкой. Эта строка анализируется до числа, и это все.
То, что вы ожидаете, похоже на то, что вы хотите, чтобы «строка» хранилась «как есть» в двоичной системе - поскольку это то, как числа хранятся физически. Нет, это все еще будет куча единиц и нулей.