BigDecimal é uma classe que realiza transformações de ponto flutuante de precisão arbitrária, por conta disso pode ser estabelecido um nível de precisão mais exata, pois guarda seu valor utilizando a base decimal. Seu desenvolvimento foi necessário pelo fato de que trabalhar com ponto flutuante não gera precisões de casas decimais, ao se utilizar Double wrapper ou double em um nível primitivo. Isso acontece pelo fato de que a JVM adota uma representação binária que segue o padrão IEEE 754. Por padrão valores numéricos decimais são representados pelo tipo double e isso pode gerar uma transformação com imprecisão, por conta disso é recomendado utilizar de Strings ao realizar transformações com BigDecimal.