Já pesquisei em tudo que é lugar e não consegui encontrar a resposta para a perda de precisão que ocorre no código abaixo:
System.out.println(o.valor.get()); System.out.println(NumberFormat.getCurrencyInstance().format(o.valor.get()));
saída:
520000.1
R$ 520.000,09
=================
o.valor.get() retorna um Float (objeto não primitivo), de onde pode ter vindo a diferença de um centavo?
poderia ser um problema de arredondamento se o.valor.get() possuisse um valor com mais de 2 casas decimais, mas isto não ocorre.