Ver Mensaje Individual
  #2  
Antiguo 06-04-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Reputación: 21
sanxpue Va por buen camino
Pues hay que desbloquearte

Esperemos que te sirva esta funcion...
un poco maquiavelica pero jala je

Código:
Function Division(CNum : String;Dividir : Int64) : LongInt;
Const
  Entero64 = 999999999999999999;
Var
  Mayores,Menores : Extended;
  ModMen,ModMay,ModConst : Int64;
Begin
  If Length(CNum) > 18 Then
  Begin
    //quitamos primero los nulos
    While CNum[1] = '0' Do
      Delete(CNum,1,1);
    //Sacamos a los que no podamos transformar en entero
    Mayores := StrToFloat(Copy(CNum,1,Length(CNum)-18));
    //Sacamos a los que podemos transformar en Enteros
    Menores := StrToFloat(Copy(CNum,Length(CNum)-17,10000));
    //Ahora sabemos que los mayores
    //es igual a mayores por la const Entero64
    //mas mayores
    //Sacamos primero el modulo de los menores
    ModMen := Trunc(Menores) MOD Dividir;
    //Sacamos el modulo de los mayores
    ModMay := Trunc(Mayores) MOD Dividir;
    //Sacamos el modulo de la constante
    ModConst := Entero64 MOD Dividir;
    //lo multiplicamos por las veces que usamos la constante
    ModConst := ModConst * Trunc(Mayores);
    //Sumamos los sobrantes y sacamos el resultado
    Result := (ModMen+ModMay+ModConst) MOD Dividir;
    //y listo.. listo
  End;
  //y si no es mayor entonces eso ya es facil
End;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Dividir : Int64;
  CNum : String;
begin
  CNum := '00120345030000067890142800';
  Dividir := 97;
  ShowMessage(IntToStr(Division(CNum,Dividir)));
end;
Como siempre a sus ordenes y siempre con buena cara
saludos
__________________
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