Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Digitos en un INT (https://www.clubdelphi.com/foros/showthread.php?t=75332)

lmpadron 15-08-2011 14:51:50

Digitos en un INT
 
Hola amigos

tengo que realizar una pequeña validacion en un int de 11 digitos, el codigo que uso es el siguiente

Código:


        int a,b,c;
        a = StrToInt(DBEdit11->Text);
        c = 1;

        for (int i = 0; i <= 12; i++)
        {
                b = a / c;
                c = c * 10;

                if (i == 11){}
                else
                {
                        if (b == 0 && i < 11)
                        {
                                ShowMessage("Al numero insertado le faltan digitos " + IntToStr(b));
                                Abort();
                        }
                        if (i >= 11 && b != 0)
                        {
                                ShowMessage("Al numero insertado le sobran digitos " + IntToStr(b));
                                Abort();
                        }
                }
        }

Al correr me devuelve un error diciendo que el numero no es un valor int valido. Me corre bien hasta 10 digitos o sea 1234567891 pero en cuento le pongo el digito numero 11 o sea 12345678912 ahi me da el siguiente error

Código:

---------------------------
Debugger Exception Notification
---------------------------
Project PROJECT.exe raised exception class EConvertError with message ''12345678912' is not a valid integer value'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help 
---------------------------

Alguna idea de como solucionarlo ???

Gracias de antemano

Casimiro Notevi 15-08-2011 15:10:11

No puedes usar un int, el número mayor que almacena es 2^32 que sería 2.147.483.648
Así que debes usar otro tipo o simplemente usa un string para almacenar la cadena.

escafandra 15-08-2011 15:23:47

Como dice Casimiro un int tiene como valor máximo sin signo es 4294967295. (con signo es la mitad).

Puedes usar un __int64 para almacenarlo.
Me pregunto si no será mas fácil, además, el análisis de sus cifras desde el mismo Edit en el que se introduce, antes de pasarlo a un __int64 :rolleyes:

Saludos.

lmpadron 15-08-2011 15:27:13

Si trato de usar String me da el siguiente error

Código:


---------------------------
Debugger Exception Notification
---------------------------
Project VB.exe raised exception class EVariantOverflowError with message 'Overflow while converting variant of type (String) into type (Integer)'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help 
---------------------------

Me parece que tengo que convertirlo antes a algo numerico para poder realizar operaciones aritmeticas. Trate de convertirlo a Double, pero no se como llevar de ahi a String, igual trate con long int pero me da el mismo error. Alguna sugerencia de como hacerlo ???

ecfisa 15-08-2011 15:47:57

Hola Impadrón.

Creo que Casimiro y escafandra ya te lo han dicho todo, el problema es que tu número es muy grande. Aquí, tenés los tipos numéricos básicos, bits que ocupan y el tipo de uso que podes darles.

Cita:

Trate de convertirlo a Double, pero no se como llevar de ahi a String
Para convertir de Double a AnsiString usá FloatToStr y para convertir de AnsiString a Double, StrToFloat, pero vas a estar en la misma situación.

Saludos.

lmpadron 15-08-2011 16:00:29

pues no encuentro que tipo de valor usar !!!! en esencia lo que quiero hacer es contar los digitos del DBEdit y saber si tiene 11, mas o menos. Con int no puedo, con float no puedo, con double jejejje lo que me saca en los mensajes es IE-5 jajajaja pues ni idea !!!!
Como puedo contar los digitos de un numero y definir si se pasa o no del numero de digitos deseado ???????
Gracias a todos por su ayuda y disculpen que pregunte tanto pero es que realmente no entiendo como se puede hacer !!!

roman 15-08-2011 16:05:58

Y, ¿por qué no simplemente tomas la longitud de la cadena de texto del Edit, en lugar de convertirlo a entero?

// Saludos

ecfisa 15-08-2011 16:08:53

Hola.

Código:

  if (strlen(DBEdit1->Text.c_str()) < 11)
    ShowMessage("El número es menor a 11 digitos");
  else if (strlen(DBEdit1->Text.c_str()) > 11)
    ShowMessage("El número es mayor a 11 digitos");
  else
    ShowMessage("El número es igual a 11 digitos");

Saludos.

Edito: Mientras redactaba este mensaje veo que román ya te había sugerido lo mismo... :)
Agrego: Y se me escapó que escafandra lo había mencionado en su primer mensaje... :)

escafandra 15-08-2011 16:16:37

Hola.
Cita:

Empezado por escafandra (Mensaje 409444)
...Me pregunto si no será mas fácil, además, el análisis de sus cifras desde el mismo Edit en el que se introduce, antes de pasarlo a un __int64 :rolleyes:...

Saludos.

lmpadron 15-08-2011 16:20:38

gracias amigo, nunca se me ocurrio esa idea !!! y cuando la postearon no la entendí jejejeje lo siento de veras


La franja horaria es GMT +2. Ahora son las 10:31:24.

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