Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-05-2004
cinecito cinecito is offline
Registrado
 
Registrado: may 2004
Posts: 6
Poder: 0
cinecito Va por buen camino
Longitud maxima integer

var digitos: int64;
begin
digitos := 21011715373203075755142800;
.......
end;


Me da el error "21011715373203075755142800, is not valid integer value"

Alguien sabe porque, si he leido que int64 es 2 elevado a 68 como es posible que no abarque ese rango?
Responder Con Cita
  #2  
Antiguo 11-05-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
9223372036854775807 {Valor máximo de un Int64 (High(Int64))}
21011715373203075755142800 {Tu valor}
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 11-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por cinecito
como es posible que no abarque ese rango?
¿Será porque 2^68 es bastante menor que 21011715373203075755142800?

// Saludos
Responder Con Cita
  #4  
Antiguo 11-05-2004
cinecito cinecito is offline
Registrado
 
Registrado: may 2004
Posts: 6
Poder: 0
cinecito Va por buen camino
Ok, entonces como tengo que declarar esa variable?
Responder Con Cita
  #5  
Antiguo 11-05-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
¿Vas a necesitar hacer cálculos sobre este tipo de datos?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 11-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Para manejo de enteros tan grandes me parece que tendrás que usar el tipo TBcd de la unidad FmtBcd. El problema es que toda la aritmética para estos valores tendrás que hacerla mediante funciones especiales (busca BCD en la ayuda de Delphi) y no será muy conveniente si deseas gran rapidez de cálculos.

// Saludos
Responder Con Cita
  #7  
Antiguo 11-05-2004
cinecito cinecito is offline
Registrado
 
Registrado: may 2004
Posts: 6
Poder: 0
cinecito Va por buen camino
Question

Veamos, lo que necesito es calcular el código IBAN asociado al país, éste es mi procedimiento:

procedure TForm1.TButtCalculaIBANClick(Sender: TObject);
var
dividendo,divisor,iban,cuenta: string;
resto,resultado:int64;
i:smallint;
begin
cuenta := '21001715370200075755142800';
i:=0;
divisor:='97';
i:=length(divisor);
dividendo:=copy(cuenta,0,i);
while strtoint64(dividendo) < strtoint(divisor) do
begin
i:=i+1;
dividendo:=copy(cuenta,0,i);
while (i < length(cuenta) ) do
begin
resto:=strtoint64(dividendo) mod strtoint(divisor);
i:=i+1;
dividendo:=inttostr(resto)+copy( cuenta,i+1,(i) );
end;
resto:=strtoint64(dividendo) mod strtoint(divisor);
resultado:=(98-resto);
end;
EdtIBAN.Text:=inttostr(resultado);
end;

... Y el problema lo tengo a la hora de asignarle a la variable los 20 dígitos de la cuenta + 142800. ¿Existe otra manera de calcular este código en delphi?

He probado lo del bcd y la verdad es que se complica un poco, debe haber otra manera más sencilla de resolverlo.

Saludos.
Responder Con Cita
  #8  
Antiguo 11-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Talking Sera...¡¡

Sera que eres paisano de Nopatic.. hizo la misma pregunta y hasta me invito a desayunar, espero que tambien me invites por que te sacare del mismo problema....

checate esta link http://www.clubdelphi.com/foros/showthread.php?t=8922

si te sirve nada mas junto otros 10 y ya estare en España desayunando gratis...
__________________
saludos desde Puebla Mexico..
asanxt@hotmail.com
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
  #9  
Antiguo 11-05-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
no será muy conveniente si deseas gran rapidez de cálculos.
Un comentario: los cálculos con Int64 tampoco son muy veloces, ya que no se trata de un tipo de dato nativo de procesadores de 32bits, que es el código que compilan las versiones 2, 3, 4, 5, 6 y 7 de Delphi. El tipo Int64 es un tipo “simulado” por el compilador, pueden verlo debugueando el código compilado de una división de Int64, y verán como en lugar de hacer un div, se llama a una subrutina llamada _lldiv (esta declarada en System), que hace varios pasos para hacer una simple división. En System.pas hay toda una sección donde se definen "64-bit Integer helper routines".

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 11-05-2004 a las 21:06:31. Razón: Agregué un Comentario
Responder Con Cita
  #10  
Antiguo 12-05-2004
cinecito cinecito is offline
Registrado
 
Registrado: may 2004
Posts: 6
Poder: 0
cinecito Va por buen camino
Muchas gracias!

Efectivamente Sanxpue, esa funcion va de maravilla, justo lo que necesitaba gracias tambien a Roman y Federico por su ayuda.

Por cierto, lo del desayuno sigue en pie, no conozco a Nopatic pero vivo cerca de Valencia, asi que si un dia estás dispuesto a cruzar el charco ya sabes q mas de uno estaría encantado con un invitarte a un desayuno,jeje....

Saludos.
Responder Con Cita
  #11  
Antiguo 12-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Talking Ya vez...

Te dije que te iba a servir..pero nada mas me faltan otros 5 para que sea completa la semana...y otros 7 para la comida y otros 7 para la cena y otro pal hospedaje.. osease que ya falta poco.. ahora si me quieres ayudar como yo, diles a tus amigos programadores que pongan la misma pregunta jejejeje
__________________
saludos desde Puebla Mexico..
asanxt@hotmail.com
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:12:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi