Atribuir Float com 2 casas deciimais

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…

Valeu

1 curtida

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.

Ola, vc pode usar isso:

int casasDecimais = 2;
BigDecimal aNumber = new BigDecimal(16.806835);
aNumber = aNumber.setScale(casasDecimais, BigDecimal.ROUND_HALF_UP);	
double value = aNumber.doubleValue();

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.

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!!

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!)

ufa…hj a cerveja de sexta-feira vai descer ate mais redonda !! :smiley:

vlw thingol

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! :wink:

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));

Massa, acho q o melhor eh essa ultima dica, valeu…

a discussao tbm foi muito boa.

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???