| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/09/2008 16:18:46
|
diego_qmota
JavaEvangelist
![[Avatar]](/images/avatar/e355819c0931a90b594aeb8d6a73587f.jpg)
Membro desde: 28/09/2008 15:44:35
Mensagens: 346
Localização: Paulínia
Offline
|
Boa tarde!
Estou tentando efetuar operações de ponto flutuante com double, para efetuar cálculos com moeda.
No entanto, sempre ocorre uma imprecisão indesejável de 0.01 para mais (ou para menos).
Gostaria de saber como posso contornar isso para que os cálculos com moeda sejam precisos. Já procurei a classe BigDecimal, mas parece que ela não existe para Java em dispositivos móveis...
|
"Go ahead, make my day!" |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/09/2008 19:14:40
|
xwillianss
JavaGuru
![[Avatar]](/images/avatar/b94fba7670eeb44dce2a0d8eb790e9f5.jpg)
Membro desde: 17/05/2008 23:29:34
Mensagens: 247
Localização: Itabuna - Bahia - Brazil
Offline
|
Já tentou long?
|
Willian Silva
Técnico em Análise de Sistemas |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2008 15:35:20
|
diego_qmota
JavaEvangelist
![[Avatar]](/images/avatar/e355819c0931a90b594aeb8d6a73587f.jpg)
Membro desde: 28/09/2008 15:44:35
Mensagens: 346
Localização: Paulínia
Offline
|
Não tentei..como eu posso usar long para efetuar cálculos com ponto flutuante?
Como faço essa utilização?
|
"Go ahead, make my day!" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2008 15:37:38
|
diego_qmota
JavaEvangelist
![[Avatar]](/images/avatar/e355819c0931a90b594aeb8d6a73587f.jpg)
Membro desde: 28/09/2008 15:44:35
Mensagens: 346
Localização: Paulínia
Offline
|
Não..não tentei ainda. Como utilizo long para efetuar operações com ponto flutuante?
|
"Go ahead, make my day!" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2008 15:41:45
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
O que ele lhe sugeriu é fazer as contas em centavos (ou em décimos de centavos). Dá um pouco de trabalho...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2008 16:30:11
|
npereirajr
JavaTeenager
Membro desde: 04/03/2008 15:21:35
Mensagens: 157
Localização: Rio de Janeiro
Offline
|
Porque vc não usa double?
double numero1 = 6.5;
double numero2 = 66.7;
double numero3 = numero1 / numero2;
|
Nelson Pereira Junior
Desenvolvedor Web e Móvel
Blog sobre desenvolvimento de aplicações móveis, J2ME, BlackBerry, FlashLite, Android, e mais: Blog: DevMobile.blog.br
Mobile Phone: +55 21 7623-0151
GTalk e MSN: npereirajr@gmail.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2008 17:45:32
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
Bem, eu faria as operações utilizando ints ou longs com o valor em centavos.
Outra alternativa é copiar e colar a classe BigDecimal e mudar o pacote.
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2008 18:24:42
|
npereirajr
JavaTeenager
Membro desde: 04/03/2008 15:21:35
Mensagens: 157
Localização: Rio de Janeiro
Offline
|
Pra que copiar classe BigDecimal, e fazer o cauculo em centavos se pode-se usar double? Pra que inventar se já está pronto?
|
Nelson Pereira Junior
Desenvolvedor Web e Móvel
Blog sobre desenvolvimento de aplicações móveis, J2ME, BlackBerry, FlashLite, Android, e mais: Blog: DevMobile.blog.br
Mobile Phone: +55 21 7623-0151
GTalk e MSN: npereirajr@gmail.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/09/2008 18:25:39
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Outra alternativa é copiar e colar a classe BigDecimal e mudar o pacote.
A classe BigDecimal é imensa; não vai caber em um dispositivo limitado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/09/2008 21:43:04
|
diego_qmota
JavaEvangelist
![[Avatar]](/images/avatar/e355819c0931a90b594aeb8d6a73587f.jpg)
Membro desde: 28/09/2008 15:44:35
Mensagens: 346
Localização: Paulínia
Offline
|
Quanto a efetuar o cálculo com centavos, entendi mais ou menos..
o problema é que vou fazer diversos tipos de cálculo, não somente soma, mas multiplicação, divisão..é aí que acho que complica utilizar long na parte inteira e fracionária...vou ter que simular esses tipos, talvez "precisar" onde a vírgula vai cair...passar um valor do cálculo de centavos para a parte inteira..
O tipo Double eu já estava utilizando. Como expliquei no início do tópico, ele apresenta imprecisão no cálculo de operações com moeda..fica dando uma diferença muito pequena para cima e para baixo.
A classe BigDecimal eu teria que pegar do Math e readaptá-la né?
|
"Go ahead, make my day!" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/09/2008 21:46:06
|
diego_qmota
JavaEvangelist
![[Avatar]](/images/avatar/e355819c0931a90b594aeb8d6a73587f.jpg)
Membro desde: 28/09/2008 15:44:35
Mensagens: 346
Localização: Paulínia
Offline
|
Em centavos converteria:
R$1,59 = 159 centavos...
Eu faço as operações e uso um método para converter de volta para Double?
|
"Go ahead, make my day!" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/10/2008 07:22:31
|
npereirajr
JavaTeenager
Membro desde: 04/03/2008 15:21:35
Mensagens: 157
Localização: Rio de Janeiro
Offline
|
Quer dizer que se vc fizer:
double n1 = 3.51;
double n2 = n1 * 2;
O resultado em n2 não será 7,02???
|
Nelson Pereira Junior
Desenvolvedor Web e Móvel
Blog sobre desenvolvimento de aplicações móveis, J2ME, BlackBerry, FlashLite, Android, e mais: Blog: DevMobile.blog.br
Mobile Phone: +55 21 7623-0151
GTalk e MSN: npereirajr@gmail.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/10/2008 09:56:59
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
npereirajr wrote:Porque vc não usa double?
double numero1 = 6.5;
double numero2 = 66.7;
double numero3 = numero1 / numero2;
Porque float e double sofrem com erros de arredondamentos que se traduzem em um grande desastre em cálculos financeiros.
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/10/2008 09:58:15
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
thingol wrote:
Outra alternativa é copiar e colar a classe BigDecimal e mudar o pacote.
A classe BigDecimal é imensa; não vai caber em um dispositivo limitado.
E se for copiado apenas o mínimo necessário? Tipo, os métodos que não são utilizados dela não precisam vir junto.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/10/2008 10:00:27
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
diego_qmota wrote:Em centavos converteria:
R$1,59 = 159 centavos...
Eu faço as operações e uso um método para converter de volta para Double?
Para que converter em double? Esqueça o double e simplesmente não o use em lugar algum! Deixe sempre-sempre-sempre em centavos. Apenas na hora de mostrar para o usuário você enfia a vírgula lá, trabalhando com String:
This message was edited 2 times. Last update was at 01/10/2008 10:01:46
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
|
|