luizf Postado Julho 25, 2010 Denunciar Share Postado Julho 25, 2010 (editado) No programa que estou fazendo é necessario fazer uns calculos, tanto com numeros reais quanto com inteiros.Quando o valor é muito alto, dá essa mensagem (valor seria o resultado que estourou):'VALOR' is not a valid integer valueQual o valor maximo que se pode trabalhar com inteiros, e com reais?Há algum jeito de contornar esse erro?Ou como posso tratar esse erro, por exemplo, quando estourar, me retorne o numero máximo que se pode obter e uma mensagem qualquer avisando tal erro.Procurei na net como tratar esse erro, mas todos que encontrei se tratava de divisão por zero e/ou conversão se string vazia para inteiro ou real.Abraço Editado Julho 25, 2010 por luizf Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 25, 2010 Denunciar Share Postado Julho 25, 2010 Qual o valor maximo que se pode trabalhar com inteiros, e com reais? BOOLEAN: Tipo lógico que pode assumir somente os valores TRUE ou FALSE e ocupa 1 byte de memória. BYTE: Tipo numérico inteiro, pode assumir valores numa faixa de 0 a 255, ocupa 1 byte. CHAR: Tipo alfa-numérico, pode armazenar um caractere ASCII, ocupa 1 byte. COMP:Tipo numérico real, pode assumir valores na faixa de -9.2.1018 a 9.2.10+18, ocupa 8 bytes, pode ter entre 19 e 20 algarismos significativos. EXTENDED: Tipo numérico real, pode assumir valores na faixa de 3,4.10-4932 a +1,1.10+4932, ocupa 10 bytes de memória e tem entre 19 e 20 algarismos significativos. INTEGER: Tipo numérico inteiro, pode assumir valores numa faixa de -32768 a +32767, ocupa 2 byte de memória. LONGINT: Tipo numérico inteiro, pode assumir valores numa faixa de -2147483648 a +2147483647, ocupa 4 bytes de memória. REAL: Tipo numérico real, pode assumir valores na faixa de -2,9.10-39 a +1,7.10+38, ocupa 6 bytes de memória e tem entre 11 e 12 algarismos significativos. SHORTINT: Tipo numérico inteiro, pode assumir valores numa faixa de -128 a +127, ocupa 1 byte de memória. SINGLE: Tipo numérico real, pode assumir valores numa faixa de –1,5,10-45 a +3,4.10+38, ocupa 4 bytes de memória, e tem de 7 a 8 algarismos significativos. WORD: Tipo numérico inteiro, pode assumir valores numa faixa de 0 a 65535, ocupa 2bytes de memória. STRING: Tipo alfanumérico, possuindo como conteúdo uma cadeia de caracteres. O número de bytes ocupados na memória varia de 2 a 256, dependendo da quantidade máxima de caracteres definidos para a string. O primeiro byte contem a quantidade relativa de caracteres da cadeia. exemplo:procedure TForm1.Button1Click(Sender: TObject); var min, max : Integer; const MaxInt = High(Integer); begin // seta o valor minimo e maximo para o tipo de dado min := Low(Integer); max := High(Integer); ShowMessage('Min integer value = '+IntToStr(min)); ShowMessage('Max integer value = '+IntToStr(max)); //O valor maximo para um inteiro é normalmente (2^32)-1 = 2,147,483,647 ShowMessage('Max integer value = '+IntToStr(maxint)); end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 luizf Postado Julho 25, 2010 Autor Denunciar Share Postado Julho 25, 2010 Deixa ver se entendi.Quer dizer que quando se usa:max := High(Integer);max irá ocupar o ultimo posição dos inteiros?Se sim, então posso por exemplo usar:var Valor, Max, I, X : Integer; begin ..... ..... X:= xxx; for I:= 0 to X do begin ..... ..... ..... if Valor > Max then Break; end; end;E esse High, pode ser usado para inteiro, real, word, longint,...?Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 25, 2010 Denunciar Share Postado Julho 25, 2010 exemplo:procedure TForm1.Button1Click(Sender: TObject); var max : Integer; min, max1 : Int64; begin max := High(Integer); ShowMessage('Max integer value = '+IntToStr(max)); max := High(Shortint); ShowMessage('Max Shortint value = '+IntToStr(max)); max := High(Smallint); ShowMessage('Max Smallint value = '+IntToStr(max)); max := High(Byte); ShowMessage('Max Byte value = '+IntToStr(max)); max := High(Word); ShowMessage('Max Word value = '+IntToStr(max)); max := High(LongWord); ShowMessage('Max LongWord value = '+IntToStr(max)); max := High(Cardinal); ShowMessage('Max Cardinal value = '+IntToStr(max)); min := Low(Int64); max1 := High(Int64); ShowMessage('Min int64 value = '+IntToStr(min)); ShowMessage('Max int64 value = '+IntToStr(max1)); end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 luizf Postado Julho 25, 2010 Autor Denunciar Share Postado Julho 25, 2010 Beleza, agora me dá uma idéia, coloquei um ProgressBar no meu programa, para se ter uma idéia de quanto falta para acabar o processamento.Mas, o resultado de onde é atualizado o ProgressBar, é um valor Extended, então fiz assim:ProgressBar1.Max:= Trunc(ValorExtended);ProgressBar1.Position:= ProgressBar1.Position +1;Com valores pequenos, ou até onde aceita o Position, beleza, mas tem valores em que tem processamento a rodar, mas estourou o inteiro.Que idéia voce me dá para contornar isso?Eu estava pensado em fazer algo como pegar o valor do Extended e usar no ProgressBar1 em escala menor, exemplo.unit Unit1; interface uses...... ...... var DV: Integer; implementation ...... ...... var PosPB: Integer; begin DV:= 2; while ValorExtended > High(Integer) do begin ValorExtended:= ValorExtended / DV; DV:= DV+1; end; ProgressBar1.Max:= Trunc(ValorExtended); end; ...... E para atualizar o ProgressBar. if (Trunc(ValorExtended / DV) ) > ProgressBar1.Position then ProgressBar1.Position:= ProgressBar1.Position +1;O que acha, é possível? Alguma idéia melhor?Obrigado... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Julho 27, 2010 Denunciar Share Postado Julho 27, 2010 Até agora não entendi para que chegar ao limite de valor do Extended ... Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
luizf
No programa que estou fazendo é necessario fazer uns calculos, tanto com numeros reais quanto com inteiros.
Quando o valor é muito alto, dá essa mensagem (valor seria o resultado que estourou):
'VALOR' is not a valid integer value
Qual o valor maximo que se pode trabalhar com inteiros, e com reais?
Há algum jeito de contornar esse erro?
Ou como posso tratar esse erro, por exemplo, quando estourar, me retorne o numero máximo que se pode obter e uma mensagem qualquer avisando tal erro.
Procurei na net como tratar esse erro, mas todos que encontrei se tratava de divisão por zero e/ou conversão se string vazia para inteiro ou real.
Abraço
Editado por luizfLink para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.