PDA

Ver la Versión Completa : comparar nros de 15 digitos


fedelphi
12-05-2007, 17:18:14
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

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:

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:

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