Problemas com ponto flutuante e Random  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
skyblue
JavaGuru
[Avatar]

Membro desde: 13/08/2003 08:12:36
Mensagens: 238
Localização: Belo Horizonte - MG
Offline

[color=blue]Oi pessoal !!! Estou desenvolvendo uma classe em que preciso de um gerador de números float aleatório mas como eu não conseguia controlar o número de casas decimais depois da virgula, resolvi criar uma.

Tem alguma forma de fazer isso sem gambiarra ? Porque eu pesquisei e não encontrei... para ter controle do número de casas eu tive que gerar números inteiros e concatenar com uma string pra depois transformar em float.

O problema maior é que ele não ta gerando corretamente, pelo menos quando leio a variável float o número, algumas vezes, o numero de casas decimais esta maior do que eu determinei. Alguem tem ideia de qual pode ser o problema ?

Aqui estão o meu construtor e o método:

Valeu pessoal !!!
Skyblue[/color]

"Para que o mal triunfe basta que os bons não façam nada"
Edmund Burke
[Email] [WWW] [MSN] [ICQ]
wcaquino
HelloWorld

Membro desde: 06/10/2004 14:19:24
Mensagens: 10
Offline

Olá skyblue,

Se vc utilizar a classe decimal format, vc vai poder controlar a quantidade de casas...



Nesse código aí a saída é 4.5000... se o número tiver mais casas decimais ele vai arredondar

Flws

O dinheiro é quase tudo, mas o quase tudo quase sempre é quase nada!
[MSN] [ICQ]
skyblue
JavaGuru
[Avatar]

Membro desde: 13/08/2003 08:12:36
Mensagens: 238
Localização: Belo Horizonte - MG
Offline

wcaquino wrote:Olá skyblue,

Se vc utilizar a classe decimal format, vc vai poder controlar a quantidade de casas...



Nesse código aí a saída é 4.5000... se o número tiver mais casas decimais ele vai arredondar

Flws
Oi, o problema é que eu não preciso imprimir ou manipular strings, meu problema é pra manipular float mesmo. Eu tenho que somar e multiplicar floats, so queria saber se teria jeito sem ter que converter pra string e depois pra float novamente.

Valeu
Skyblue

"Para que o mal triunfe basta que os bons não façam nada"
Edmund Burke
[Email] [WWW] [MSN] [ICQ]
David
JavaEvangelist
[Avatar]

Membro desde: 18/03/2005 13:10:33
Mensagens: 450
Localização: Natal/RN
Offline

Se você quiser que as casas decimais que estão sobrando sejam truncadas, e não arredondadas, você pode fazer algo assim:

1. Multiplique por 10^(numero de casas decimais)
2; Faça um cast para int.
3. Faça um cast para double
4. Divida por 10^(numero de casas decimais).

Exemplo: 4.78956 com três casas decimais.

1. 4.78956 * 10^3 = 4789.56
2. (int) 4789.56 = 4789
3. (double) 4789 = 4789.0
4. 4789.0 / 10^3 = 4.789

Com o DecimalFormat você iria obter 4.790, é só dar uma olhada no teste abaixo:


Dependendo das suas necessidades você decide o que usar.

David Pereira
Engenheiro de Computação - UFRN
Mestre em Engenharia Elétrica
Doutorando em Engenharia Elétrica
[WWW]
skyblue
JavaGuru
[Avatar]

Membro desde: 13/08/2003 08:12:36
Mensagens: 238
Localização: Belo Horizonte - MG
Offline

Oi pessoal !!! Pelo que estou vendo David, esta seria a forma mais facil mesmo, mais tarde vou tentar refatorar minha classe para usar isso.

Mais fica a crítica, eu achei muito chato isso ja não estar implementado na jdk...

Valeu pessoal !!!
Skyblue

"Para que o mal triunfe basta que os bons não façam nada"
Edmund Burke
[Email] [WWW] [MSN] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team