QUAL MELHOR TIPO DE DADO DE VARIAVEL PARA DINHEIRO

PROFESSOR 25/11/2013 17:19:54
#431450
Não é bem verdade, gente.

Precisão é outra coisa. Está relacionada ao menor valor representativo de um tipo.

O que a Microsoft fez ao criar o tipo CURRENCY no VB6 foi criar uma alternativa ao SINGLE, para que as DUAS CASAS decimais pudessem ser trabalhadas com mais afinidade aos valores monetários.

Assim, o DOUBLE é um tipo de maior precisão do que o SINGLE ou o MONEY.

Para lidar com valores monetários, no SQL Server o tipo mais adequado ainda é o MONEY. O que se pode alegar é que, por questões de compatibilidade, usar um FLOAT ou um DECIMAL pode ser mais interessante. Ou seja, se estou criando a aplicação para SQL Server e o meu cliente optar amanhã por um Oracle, a migração dos dados é mais simples usando os tipos FLOAT ou DECIMAL. Lembrando, o tipo FLOAT consome mais do que o DECIMAL ou que o MONEY.

Já no VB6, independente se a base possui um campo do tipo MONEY, DECIMAL ou FLOAT, o uso de variáveis do tipo Money é o mais adequado sempre que não seja necessário o processamento de valores muito inferiores ao centavo. Assim, se for necessária uma precisão maior, por exemplo na contabilização de uma CONTA GRÁFICA ou REMESSA DE VALORES (BACEN), o tipo DOUBLE é o mais adequado. Não havendo a necessidade dessa precisão, como em um aplicativo POS, o tipo é o MONEY.

No VB.Net, o tipo mais adequado para moedas é o DECIMAL.

Ponto flutuante é a representação de um número real onde se pode identificar a parte inteira, a parte decimal (ou fracionada) e o separador (ponto, virgula etc., dependendo do país). Assim, qualquer número que possua uma parte fracionada, é um número real de ponto flutuante. Valores monetários entram nessa classificação. Outras representações são, por exemplo, as frações (Exemplo: 12/1026 ), a notação científica (Exemplo: 0,25456x102) e a tetração, e normalmente são representações usadas para expressar valores de precisão maior do que aquela requerida por valores monetários.
GILBERTOOTS 26/11/2013 08:36:39
#431465
Se for Vb.net , Decimal
OCELOT 26/11/2013 11:09:34
#431474
Citação:

:
Não é bem verdade, gente.

Precisão é outra coisa. Está relacionada ao menor valor representativo de um tipo.



Não PROFESSOR, quando se trabalha com variáveis do tipo ponto flutuante precisão se refere a capacidade dessa variável representar o número correto, o que nem sempre acontece, muitas vezes ele chega a um valor bem próximo do esperado mas não exatamente nele, e é por isso que se deve usar o Currency do VB6 ou Decimal do VB.Net quando se precisa garantir que o valor esteja correto, como no caso de dinheiro, pois eles são internamente valores inteiros, e isso garante a precisão dos dados guardados nele, no caso do VB6 com a limitação de ter sempre 4 casas decimais.

Você percebe a falta de precisão dos tipos de ponto flutuante principalmente quando se faz cálculos com ele, um bem simples que fiz aqui no VB.Net para colocar como exemplo seria esse:
Dim s As Double

For i As Integer = 0 To 10
s += 0.1
Next

For i As Integer = 0 To 10
s -= 0.1
Next

If s = 0 Then
MessageBox.Show([Ô]O valor é zero[Ô])
Else
MessageBox.Show([Ô]O valor é [Ô] & s)
End If

Pelo código o esperado seria que entrasse no primeiro if, pois o resultado deveria ser 0, mas o valor que recebo é 2,77555756156289E-17, onde corrigindo a vírgula (devido ao E-17 que significa que a vírgula está 17 casas para a esquerda do valor) ficaria 0,0000000000000000277555756156289, que é bem próximo de 0, mas como não é exatamente zero ele entra no else
KELLY 26/12/2013 21:05:07
#432476
Gente é VB6, não é VB.NET.
Já peguei vários projetos onde cada um informa um tipo de dado, por isso a dúvida.
MARCELO.TREZE 26/12/2013 23:33:11
#432478
Kelly usa currency, é a melhor opção, quanto a precisão é certo o que o colega Ocelot disse, currency é mais preciso principalmente tratando-se de cálculos. experiência própria.

KELLY 02/10/2014 02:03:11
#441644
Bom dia turminha,

Agradeço pela ajuda de você, desculpe por não ter respondido antes. Dentre essas dúvidas, eu gostaria de saber qual tipo de dado eu posso usar para valores numéricos que possuem zeros antes de uma vírgula ou ponto sem afetar o seu cálculo. Por exemplo: 0.35

O mais preciso seria um double ou currency?

Página 2 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas