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.
Você pode multiplicar o valor por 100, arredondar, e dividir por 100 de novo.
Exemplo:
doubled=12.34567;d=Math.rint(d*100.0)/100.0;// multiplica por 100, arredonda e divide por 100 de novoSystem.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.
P
pm1
Desculpem esta mudando o foco do post…
thingol, BigDecimal é mesmo este monstro ?
Cara, eu tenho um sistema, que faz muito calculo monetario, e foi usuado muito BigDecimal !!! :shock:
Vc sabe qual seria a melhor forma de um refctoring neste tipo de app ?
vlw cara!!
T
thingol
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!)
P
pm1
ufa…hj a cerveja de sexta-feira vai descer ate mais redonda !!
vlw thingol…
J
julianostr
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.
Ironlynx
É… 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!
Juk
Acho que a melhor maneira é usar NumberFormat
NumberFormat formatter = new DecimalFormat(“0.00”);
int a = 17623245;
float b = (float) (a/(1024.0*1024.0));
b = Float.parseFloat(formatter.format(b));
K
Katito
Massa, acho q o melhor eh essa ultima dica, valeu…
a discussao tbm foi muito boa.
Ironlynx
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???