Gostaria de atribuir um valor float a um variavel pois preciso fazer um append nela.
Ha dois dias me deram a solucao de usar System.out.printf("%.2f",a), porem preciso tem esse valor guardado.
Olhem como esta meu codigo agora:
public static void main(String[] args) {
int a = 17623245;
float b = (float) (a/(1024.0*1024.0));
System.out.println(b);
System.out.printf("%.2f", b);
}
RESULTADO:
16.806835
16.81
Preciso armazenar esse segundo valor a uma varial float ou double…
Você pode multiplicar o valor por 100, arredondar, e dividir por 100 de novo.
Exemplo:
double d = 12.34567;
d = Math.rint (d * 100.0) / 100.0; // multiplica por 100, arredonda e divide por 100 de novo
System.out.printf ("%.2f", d);
O único problema é que mesmo assim você terá de usar o tal do %.2f, porque fazer isso ainda pode dar alguns problemas na hora de mostrar (lembre-se que ponto flutuante não é exato, e SE PUDER NÃO USE FLOAT, E SIM DOUBLE, porque ele é MAIS PRECISO e MAIS RÁPIDO.
Credo, criar um BigDecimal é coisa super-pesada.
Não faria isso em um servidor com milhares de transações simultâneas.
Mas uma vantagem do seu código é que serve para qualquer número de casas decimais.
Bom, se você vai lidar direto com dinheiro, é melhor usar BigDecimal mesmo - não é que seja tão pesado assim. É que normalmente a gente vê isso sendo usado apenas em um ou dois lugares no sistema - então dou a solução mais boboca mesmo. Se for usado no sistema inteiro, usar BigDecimal é melhor. (Isso porque o Java não foi designado por alguém que lidava com aplicações comerciais e NÃO TEM uma classe adequada para tratar com moedas, e NÃO TEM uma classe adequada para tratar com datas. Que coisa!)
Thingol, se o java tivesse aparecido com essa força toda nas décadas de 70 e 80, auge da inflação galopante, com certeza alguém já teria construído algo.
É… eu jah reclamei disso até no forum da Sun tempos atrás…
Por exemplo, eu tenho N campos aqui formatados dessa forma:
Patrimônio da Empresa(R$): 1.200.340,50
No BD(MySQL) isso é um campo DECIMAL.Como é imprescindível a formatação, Thingol, vc acha melhor criar uma classe Currency(Moeda), onde eu pego essa String, uso split e talz, formo um BigDecimal e insiro no BD(ou retiro e formato para exibição), ou faço sempre a conversão “instant-on”, na hora do uso?Eu tenho uns 4 campos assim, e nunca tive um sistema grande o suficiente para me preocupar com a Performance disso!
Falando em formatação, me deparei nesses dias como uma discussão interessante entre o MrM,Louds e o Paulo Silveira(nada como o cache do google!!!).Ela envolvia a discussão do uso de BigDecimal para aplicações financeiras.Eis parte dela aqui:
Hoje temos StringBuilder, mas Paulo, como é a classe que você faz quando vc tem que lidar com números grandes???