Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   comparar nros de 15 digitos (https://www.clubdelphi.com/foros/showthread.php?t=43491)

fedelphi 12-05-2007 17:18:14

comparar nros de 15 digitos
 
Hola a todos, tengo una duda sobre como verificar si un numero grande esta dentro de un rango de valores. Primero trabajo con delphi7 y tengo un numero que puede tener entre 6 y 15 digitos, este numero representa un vale que se tiene que verificar que este fuera de un determinado rango <minimo> numero en cuestion <maximo>. Este numero es inicialmente un string. Entonces lo que hice fue convertirlo a int64 con la funcion strtoint64, pero por ejemplo al string 87654 lo convierte a 19350111864945784. Hay que considerar algo mas al trabajar con este tipo de datos int64?
este es el codigo que utilizo
Código Delphi [-]
var
  aux:string;
  numero:int64;
begin
  aux:=funcion_que_devuelve_el_string_con_el_numero
  numero:=strtoint64(aux);
Gracias
Fede

seoane 12-05-2007 17:41:02

Hola fedelphi, yo no he podido reproducir el problema que comentas. Si utilizo el siguinete codigo:
Código Delphi [-]
var
  aux:string;
  numero:int64;
begin
  aux:= '87654';
  numero:=strtoint64(aux);
  ShowMessage(IntToStr(numero));
El numero que se muestra es 87654, el numero correcto.

De todas formas, si solo quieres hacer comparaciones con los números, no hace falta que los conviertas. Se pueden comparar directamente dos números en formato de texto, solo tienes que asegurarte de que tienen el mismo número de cifras, añadiendo ceros a la izquierda si es necesario.

Por ejemplo:
Código Delphi [-]
function Comparar(i,j: String): Integer;
begin
  while Length(i) > Length(j) do
    j:= '0' + j;
  while Length(j) > Length(i) do
    i:= '0' + i;
  Result:= StrComp(PChar(i),PChar(j));
end;


var
  S1, S2: String;
begin
  S1:= '1236560';
  S2:= '123556';
  if Comparar(S1,S2) > 0 then
    ShowMessage('S1 es mayor que S2')
  else
    ShowMessage('S2 es mayor o igual que S1');
end;

fedelphi 12-05-2007 18:35:53

gracias seoane, lo hare de esa manera, utilizando directamente el string. No habia tenido en cuenta los ceros adelante, asi se me simplifica mucho.
Muchas gracias
Fede


La franja horaria es GMT +2. Ahora son las 02:38:33.

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