QUAL MELHOR TIPO DE DADO DE VARIAVEL PARA DINHEIRO

KELLY 01/09/2013 21:11:12
#428372
Boa dia gente!!!

Alguém sabem qual o melhor tipo de dado para variáveis que vão armazenar valores monetários? Currency ou Double?

AJSO 01/09/2013 22:35:00
#428374
Cara KELLY


No VB 6.0
Currency,
Double,
Single,
Variant,
String,

Todos tem suas limitações quanto a tamanho e propriedades de uso com casas DECIMAIS...................

Isso vai depender muito....... no caso do VB 6.0 apenas essas mesmo ou um padrão criado por sua aplicação a partir de uma função.................

No caso apenas a variável do tipo [ô]VARIANT[ô] tem o maior valor possível de ser armazenado..... e o menor valor diferente de zero......
Maior valor com um escalonamento de 0 (sem casas decimais)
=> 79,228,162,514,264,337,593,543,950,335

Menor valor diferente de zero:
=> 0.0000000000000000000000000001


No caso de bando de dados o SQL server já trata moeda como Money...........
KELLY 02/09/2013 01:11:58
#428376
Bom dia AJSO,

Em banco de dados como SQL Server já vi alguns casos usando o DECIMAL, eu sempre uso o MONEY, mas também não sei qual é o correto para o SQL Server, minha dúvida urgente agora é para o VB6, não sei se uso o CURRENCY ou DOUBLE.
MARCELO.TREZE 02/09/2013 09:19:02
#428382
Resposta escolhida
Pra você poder se decidir sózinha

O tipo de dado currency foi especialmente projetado para representar valores monetários. Um valor monetário tem sempre quatro casas decimais após a vírgula - isto é, você pode armazenar um valor como 11,1625, mas não um valor como 21,00003. (Este último valor seria arredondado para 21,0000)

Os tipos de dados single e double permitem-lhe expressar números de ponto flutuante. Números de ponto flutuante (também chamados de números reais ou apenas reais) representam valores que possuem partes fracionárias. O nome ponto flutuante provém de ponto decimal flutuante, que pode aparecer em qualquer posição, como em 0,000001, 356,555 ou, ainda, 10000,0; ao contrário do tipo currency, que é um exemplo de tipo de dado com ponto decimal fixo.
LUCASVA 02/09/2013 09:23:32
#428383
olha eu em pouquíssimas vezes passei por caso de não aceitar uso com currency, em geral aceita bem, e caso não seja um tipo inteiro de dados, acho que fecha bem com a maioria dos usos;
OCELOT 02/09/2013 10:34:40
#428389
Eu diria que deve sempre usar o Currency para valores monetários, pois ele garante que o número é preciso.

O que acontece com números de ponto flutuante (double ou single) é que eles são apenas aproximações dos números, estas variáveis nem sempre conseguem representar o número exato, eles garantem uma precisão de uma certa quantidade de casas decimais.

Por exemplo digamos que o single garanta 6 casas decimais, pode ser que você tenha o valor 1 e na verdade na variável se tem o valor 1.0000001, ele garantiu que as 6 primeiras casas decimais estão corretas, todas são zero, mas depois dela você ainda pode ter outro valor. Geralmente isso não é um problema e o VB6 principalmente parece meio que considerar esta diferença automaticamente em várias situações, geralmente você não vai perceber isso, mas quando se trata de um valor monetário não se pode arriscar, então o currency garante que o valor sempre vai ser exatamente aquele que foi passado para ele, no caso do VB6 vai ser sempre com até 4 casas decimais.

No SQL Server é a mesma coisa, os tipos de dados que são ponto flutuante tipo real ou float são aproximados, já o money é garantido o valor com até quatro casas decimais
AJSO 02/09/2013 14:58:48
#428397
Cara KELLY

Citação:

Bom dia AJSO,

Em banco de dados como SQL Server já vi alguns casos usando o DECIMAL, eu sempre uso o MONEY, mas também não sei qual é o correto para o SQL Server, minha dúvida urgente agora é para o VB6, não sei se uso o CURRENCY ou DOUBLE.




O adequado seria o currency pois é para o uso em GET SET de valores monetários e seus tratamentos........

Boa Sorte
KIMH 02/09/2013 17:19:26
#428411
Boa tarde Kelly.

Acredito que qualquer uma das duas opções vão atender a necessidade do seu cliente.

Porém só faço uma observação já citada pelo nosso amigo OCELOT que quando se usa variáveis do tipo Double nem sempre ele armazena o valor exato, já tive problemas com isso em uma comparação entre duas variáveis do tipo Double em que as mesmas estavam apresentando o mesmo valor porém o IF retornava falso, portanto caso vá utilizar variáveis do tipo Double utilize também a função Round() para acertar a precisão em suas comparações.
JLM51 04/09/2013 14:09:19
#428482
Embora o tipo Currency, numericamente, seja menor que Doble etc.
é a melhor opção. Pois, segundo a MS ele é mais preciso.
Tanto que é recomendado para cálculos onde a precisão seja fundamental.
KELLY 14/11/2013 23:26:28
#431170
Oi pessoal,

Desculpe por não responder, estava lendo as respostas de todos e não entendi muito bem o que é um ponto flutuante. O nosso amigo MARCELO-TREZE cometou sobre, mas não entendi, sempre tive dúvida em relação ao que é um ponto flutuante.
MARCELO.TREZE 16/11/2013 18:42:23
#431191
imagenige o seguinte

double com ponto flutuante pode ser assim

1000.00
100.000
10.0000
1.00000

entendeu o ponto mudou de lugar em todos os casos
Página 1 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas