Acho que não vale a pena; é melhor ter uma classe Calc que use BigDecimal para facilitar as contas.
Embora BigDecimal não seja "final" acho que ela deveria ser considerada como "final", como a classe String.
Um exemplo (é claro que eu não tenho aqui uma classe "Calc" mas é um exemplo para você ter uma idéia do que parece melhor para você):
Calc cl = new Calc();
cl.setPrecision (4); // fazer todos os cálculos com no máximo 4 casas depois da vírgula - você está trabalhando com divisão, não?
BigDecimal result = cl.calc ("a + (2.3 * b / c) - 1.24", new BigDecimal ("23"), new BigDecimal ("45.67"), new BigDecimal (66.78));
BigDecimal result2 = new BigDecimal ("345").multiply (new BigDecimal ("23.45"));
if (cl.comp ("a/4.5 + 7 < b * 1.3", result, result2)) {
...
}
onde “a” é o primeiro parâmetro, “b” o segundo, “c” o terceiro etc, e “calc” uma função que calculasse a expressão e retornasse um BigDecimal, e “comp” uma função que calculasse a expressão e retornasse um boolean.
Outra forma (talvez seja um pouco mais flexível):
Calc cl = new Calc();
BigDecimal preco, custo = new BigDecimal ("23.45"), lucro = new BigDecimal ("10.0"), aliquota = new BigDecimal ("0.38");
cl.setPrecision (4);
// Note que isto não pode ser feito por reflection porque os nomes de variáveis locais não são disponíveis via reflection. Sorry...
cl.set ("custo", custo);
cl.set ("aliquota", aliquota);
cl.set ("lucro", lucro);
preco = cl.calc ("custo * (1 + aliquota / 100) + lucro");