Transformando 0.33333333333 em 0.3 / 0.166666666666666 em 0,16  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
carlos maia
JavaBaby
[Avatar]

Membro desde: 16/01/2009 11:32:04
Mensagens: 75
Offline

Bom dia pessoal,
gostaria de saber como eu posso transformar um double 0.333333333 em 0.3 e 0.166666666666 en 0.16 utilizando a linguagem JAVA
mauricioadl
GUJ Master
[Avatar]

Membro desde: 10/05/2007 14:52:21
Mensagens: 1140
Offline

se nao tiver problemas em arredondar os valores, assim faz:

DecimalFormat df = new DecimalFormat("##.##;(00.00)");
System.out.println(df.format(0.333333333));
System.out.println(df.format(0.166666666666));

Seu problema foi resolvido? Por favor, edite seu primeiro post e adicione [RESOLVIDO] no título.
O forum agradece.
[Email] [MSN]
evefuji
GUJ Ranger

Membro desde: 14/12/2007 22:37:17
Mensagens: 753
Offline

Pode usar o Math.round e o Math.floor, dependendo da sua "criatividade":



Ou, como é dízima, pode fazer assim:



Sinceramente, prefiro a primeira opção.
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline

Muito mais simples usar o BigDecimal.


Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi




<UnTouChAbLe>
[Email] [WWW] [MSN]
wellington.nogueira
GUJ Ranger
[Avatar]

Membro desde: 11/08/2006 11:29:56
Mensagens: 914
Localização: Osasco-SP
Offline

Giulliano wrote:Muito mais simples usar o BigDecimal.

Concordo em partes. Lembrando que se o double pasado no parâmetro for resultado de cálculo, o mesmo pode estar distorcido e não representando dízima. Em caso de arredondamentos como citado (scale = 2) não vejo problemas, mas nunca se sabe...

Prefira que as operações matemáticas (soma, subtração, multiplicação e divisão) sejam realizadas pelo BigDecimal (entretanto, esse cálculo fica mais lento).

57 45 4C 4C 49 4E 47 54 4F 4E
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
"Se você acha que programar em Java com Swing é simples? Acredite em mim, não é!"
http://developmentforever.wordpress.com/
leopoldof
GUJ Master

Membro desde: 07/03/2008 07:40:45
Mensagens: 1012
Offline

para calculos com casas decimais, eu sempre uso bigdecimal, principalmente se for algo que mecha com o lado financeiro
Enadrov
Thread.start()

Membro desde: 20/07/2011 16:02:24
Mensagens: 34
Offline

jaboot
Virtual Machine Man

Membro desde: 01/07/2005 14:25:37
Mensagens: 749
Localização: São Paulo
Offline

Giulliano wrote:Muito mais simples usar o BigDecimal.


++
O único problema de usar o BigDecimal é o custo.
Mas como as vezes o que mais importa no sistema são os valores ($$$), eu acho que vale a pena.
[MSN] [ICQ]
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline

jaboot wrote:
Giulliano wrote:Muito mais simples usar o BigDecimal.


++
O único problema de usar o BigDecimal é o custo.
Mas como as vezes o que mais importa no sistema são os valores ($$$), eu acho que vale a pena.


jaboot ou wellington.nogueira

vocês saberiam responder o quanto mais lento é o BigDecimal para o Double. Por que se estamos falando de nanosegundos ou milisegundos, podemos descartar essa lentidão.

Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi




<UnTouChAbLe>
[Email] [WWW] [MSN]
jaboot
Virtual Machine Man

Membro desde: 01/07/2005 14:25:37
Mensagens: 749
Localização: São Paulo
Offline

Faz um loop-teste com os seus cálculos e vê a diferença.

Eu sinceramente não sei quantos milisegundos vai dar de diferença.

This message was edited 1 time. Last update was at 16/12/2011 08:33:51

[MSN] [ICQ]
wellington.nogueira
GUJ Ranger
[Avatar]

Membro desde: 11/08/2006 11:29:56
Mensagens: 914
Localização: Osasco-SP
Offline

@Giulliano, a questão é que vc vai gerar overhead por passar a trabalhar com o BigDecimal. Em geral não deve influenciar mas tudo vai depender do volume de cálculos a serem realizados.

Entretanto, é muito comum utilizar valores flutuantes para tratar valores monetários e, menos comum, para valores de engenharia. E em ambos casos, a precisão tem maior importância/significância que a performance.

Se quiser saber a diferença, pode fazer como sugeriu o @jaboot mas faça o monitoramento acompanhado de um Profiler (Ex.: JVisualVM).

57 45 4C 4C 49 4E 47 54 4F 4E
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
"Se você acha que programar em Java com Swing é simples? Acredite em mim, não é!"
http://developmentforever.wordpress.com/
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline

jaboot wrote:Faz um loop-teste com os seus cálculos e vê a diferença.

Eu sinceramente não sei quantos milisegundos vai dar de diferença.


legal pessoal...a ideia era só deixar bem claro que não vale a pena descartar bigdecimal, achando que ele prejudicaria a performance (salvo casos extermos).


aproveitando sugiro a todos darem uma lida no post da caelum http://blog.caelum.com.br/arredondamento-no-java-do-double-ao-bigdecimal/

[]'s a todos.

This message was edited 1 time. Last update was at 16/12/2011 11:36:51


Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi




<UnTouChAbLe>
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team