Se não quiser usar BigDecimal, pelo menos crie um tipo "MyMoney", para diferenciar esse caso de outros, e pendure métodos apropriados nele, em vez de funções soltas no código.
Embora sua resposta esteja correta me dá vontade de negativar por dizer que a solução passa por necessariamente usar BigDecimal. Isto não é verdade. Esta é apenas uma das soluções. O fato de você se limitar nas soluções não significa que isto seja correto. Você pode fazer a escolha que quiser, mas não imponha a sua solução para outras pessoas quando existem alternativas. Na verdade o inteiro não tem os problemas que você está falando. Ou até tem, os mesmos problemas do BigDecimal.Se não souber lidar com a escala corretamente,vai ter problemas com os dois.Não cabe aqui uma resposta completa – Maniero♦ 17/03/16 às 15:09
BigInteger e Intenger (int) são tipos de dados usados para trabalhar com números inteiros. Os tipos Double e Float são mais recomendados para trabalhar com números decimais.
Porém, se estiver trabalhando com moedas e precisar usar inteiros por causa da precisão, você deverá trocar o retorno do seu método formatar_data de int para String. Ficaria algo como:
Ouvir falar que para Representar uma moeda é melhor usar inteiros. Outra o banco de dados esta retornando tudo inteiro. – Hy-brazil 16/03/16 às 11:23
Para representar uma moeda é melhor usar inteiros? Onde você "ouviu" falar isso? – LINQ 16/03/16 às 11:25
É impossível formatar um inteiro com casas decimais, ou você usa o tipo de dado correto ou você vai ter que trabalhar com strings no meio do processo. – LINQ 16/03/16 às 11:26