DUVIDA DO OVERFLOW?

TAMANINI 05/04/2005 18:10:42
#76877
Porque em calculos como este dá erro 6 do overflow? O VB entende que o valor 2000 é inteiro e 365 é long?
Dim x As Long
x = 2000 * 365

Se eu fizer assim dá certo, no qual eu converto o 2000 para long:
Dim x As Long
x = CLng(2000) * 365
Para todos os valores fixo que faço uma multiplicação terei que converter para long(Clng(valor)) ou integer(CInt(valor )) para não ter problemas? Alguém pode me explicar?

Obs.: Tirei esse calculo pelo exemplo do msdn do VB6 no erro 6: overflow!
USUARIO.EXCLUIDOS 05/04/2005 18:48:58
#76882
Resposta escolhida
No Visual Basic, existem sete tipos de variáveis:

Integer % Números inteiros de [txt-color=#0000ff]-32.768[/txt-color] até [txt-color=#0000ff]32.767 [/txt-color]
Long & Números de [txt-color=#ff0000]-2.147.483.648 até 2.147.483.677 [/txt-color]String $ Desde 0 até 65.536 caracteres
Currency @ Desde -922.337.203.685.477,5808 até 922.337.203.685.477,5807
Single ! Números de + ou - 1,40 x 10-45 até + ou - 3,40 x 1038.
Double # Valores entre + ou - 4,94 x 10-324 até + ou - 1,79 x 10308.
Variant Qualquer um dos anteriores.
...
Dim x As Long 
x = 2000 * 365

....
Mesmo atribuido o valor a x (long), da multiplicação entre 2000 e 365, vai gerar erro, pois na verdade a referencia é feita nos números, que são inteiros, e depois de serem multiplicados, vão armazenar o resultado em uma variável x (long), o erro é gerado na hora da multiplicação, pois 2000 e 365 são números inteiros, retornam '730000', e o limite na verdade é '32.767' (vide tabela acima)...
Ja neste caso
...
Dim x As Long
x = CLng(2000) * CLng(365)

...
Os números 2000 e 365 são longos (long) e a multiplicação deles, retorna 730000 que está dentro do limite que é '2.147.483.677' (vide tabela)...
Outra alternativa seria usar a própria variável long, para armazenar o valor, assim não precisarás de converter... porém faça assim só em pequenas rotinas... por questões obvias...
...
Dim x As Long
Dim y As Long
Dim z As Long
y = 2000
z = 365
x = y * z

...
Espero que tenha entendido...
FFCOUTO 05/04/2005 18:59:41
#76885
Tem coisas que só a Microsoft explica mas não Entende.

Se você não quiser converter os números e nem usar as variáveis, utilize o símbolo [txt-color=#0000ff]&[/txt-color] após o número. Este símbolo indica que a variável ou o valor é inteiro longo.

Espero ter ajudado.
Tópico encerrado , respostas não são mais permitidas