Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Double y floats

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Double y floats Responder citando

Buenas!

Alguin me puede ayudar, tengo un problema a la hora de registrar numeros con comas.
Yo intento dar de alta información que contiene numeros como por ejemplo 1,5 -0,3 o sea numeros con decimales.

El problema llega cuando voy a dar de alta una graduacion de unas gafas. Yo e definido en la BD (access 2000) los numeros como dobles y entonces en el Builder no ser que ponerle al pasarle la información a la accion. (StrToFloat?? no ser) Al recibirla la cojo como double:

AltaUll(Integer C,double Ed,double Ee,double Cd,double Ce,
double ESd,double ESe,double ADd,double ADe,double MDd,double
MDe,double AVscd,double AVsce,double AVud,double AVue)

Pero en el FieldByName no me sale el tipico AsDouble. Entonces no ser como montarmelo. Al final le puse AsFloat. Me compilaba pero me petaba al pasarlo en la BD.

El error que me dice es:

"1.4 isn't a integer"

Alguin me podria ayudar a aclararme??

Muchas gracias!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Que tal shumi

Cita:

AltaUll(Integer C,double Ed,double Ee,double Cd,double Ce,
double ESd,double ESe,double ADd,double ADe,double MDd,double
MDe,double AVscd,double AVsce,double AVud,double AVue)


Por lo que veo, tu función tiene el prímer parámeto declarado como entero. Posiblemente por eso te manda ese error, prueba cambiarlo a double.

Saludos.
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: schumi Responder citando

Buenas! El entero este es pq le paso el codigo del ciente. Si no no me podrias referenciar a nadie.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Puedes agregar parte de tu código donde mandas a traer tu función para ver cómo estas enviando los parámetros?.

Saludos
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Buenas de nuevo!

Aquí pongo el codigo al pasar la info a la acción:
Código:
 else
        {
       OG->AltaUll(StrToInt(eCodiCli->Text),
        StrToInt(eEixd->Text),StrToInt(eEixe->Text),StrToInt(eCild->Text),StrToInt(eCile->Text),StrToInt(eEsfd->Text),
        StrToInt(eEsfe->Text),StrToInt(eAddd->Text),StrToInt(eAdde->Text),StrToInt(eMDdd->Text),StrToInt(eMDde->Text),
        StrToInt(eAVscd->Text),StrToInt(eAVsce->Text),StrToInt(eAVud->Text),StrToInt(eAVue->Text));



Y luego en mi objeto tengo la siguiente accion:
Código:

void Graduacio::AltaUll(Integer C,double Ed,double Ee,double Cd,double Ce,
        double ESd,double ESe,double ADd,double ADe,double MDd,double MDe,
        double AVscd,double AVsce,double AVud,double AVue)
{
Global::Alta(DataModule2->UllsLluny);  // heretem de l'obj Global
DataModule2->UllsLluny->FieldByName("CodiClie")->AsInteger = C;
DataModule2->UllsLluny->FieldByName("Eixd")->AsInteger = Ed;
DataModule2->UllsLluny->FieldByName("Eixe")->AsInteger = Ee;
DataModule2->UllsLluny->FieldByName("Cild")->AsInteger = Cd;
DataModule2->UllsLluny->FieldByName("Cile")->AsInteger = Ce;
DataModule2->UllsLluny->FieldByName("Esfd")->AsInteger = ESd;
DataModule2->UllsLluny->FieldByName("Esfe")->AsInteger = ESe;
DataModule2->UllsLluny->FieldByName("Addd")->AsInteger = ADd;
DataModule2->UllsLluny->FieldByName("Adde")->AsInteger = ADe;
DataModule2->UllsLluny->FieldByName("MDDd")->AsInteger = MDd;
DataModule2->UllsLluny->FieldByName("MDDe")->AsInteger = MDe;
DataModule2->UllsLluny->FieldByName("AVscd")->AsInteger = AVscd;
DataModule2->UllsLluny->FieldByName("AVsce")->AsInteger = AVsce;
DataModule2->UllsLluny->FieldByName("AVud")->AsInteger = AVud;
DataModule2->UllsLluny->FieldByName("AVue")->AsInteger = AVue;
DataModule2->UllsLluny->Post();
DataModule2->UllsLluny->Close();

}


El programa me peta al momento de pasar los valors y no dentro de la ación.

gRACIAS
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Que tal Shumi,

A simple vista todo parece normal.

Por lo que veo no realizas algún proceso adicional con tus datos.

¿Porque no utilizas los controles de datos para realizar tus inserciones? Es decir en lugar de utilizar Edit utiliza DBEdit (es solo una sugerencia).

Y bueno, con el otro tema, creo que tiene que ver con la configuración regional. Tengo entendido que para España los decimales se representan con la coma: (34,56) en el caso de México es con el punto (34.56). Por lo tanto un valor escrito en el Edit (ej 1.4 ) con configuración regional para España marcará error y viceversa.

Saludos.
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Yo lo que veo es que la funcion espera un entero y el resto de parámetros double, y tu la llamas intentando pasar todo enteros (deberias usar el strtofloat)
Al igual que en la asignacion a los campos de la tabla debes usar: AsFloat (si es que realmente quieres guardar decimales).
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Son doubles en la llamada de la funcion pero en la base de datos los tienes como entero, o cuando menos aqui

Código:

DataModule2->UllsLluny->FieldByName("Eixd")->AsInteger


PD. No seas tan parco en el nombre de tus variables, ponlas normales
EixD=eIdUsuario , ya que sera mas facil el mantenimiento en el futuro.
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Buenas de nuevo!

Primero decir que acepto el comentario de la variables, la verdad es que si, a veces me ago un lio.

Otra cosa, cuando pase el codigo aquí, si que estava en ->AsInteger, pero lo e probada de todas las maneras. Una duda que tengo es que no se si no existe pero a mi no me sale AsDouble o AsDbl o como sea. Lo e probado con AsFloat i tampoco me funcionava. Nose, siguo mirando buestros comentarios y provando.

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buenas otra vez.

Una especificacion, e puesto en la BD todo como double, pero haber, en la declaracion de la acción le puedo poner double o float. Si pongo float dentro de la acción puedo poner AsFloat pero si pongo double dentro que pongo?? AsFloat?

Ahora estoy viendo que yo introduzco un valor con comas directamente en los registros de la BD i me los conserva pero cuando executo el programa "no me muestra los decimales, ose solo me muestra el entero".

Supongo que aquí hay algun prolema.

Alguien le a pasado lo mismo o sabe que pasa??

Muchisimas gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

double dTuDoble=0;

dTuDoble=qry->FieldByName("xxx")->AsFloat;
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Buenas! Y e solucionado el problema pero me queda una ultima question, al ser double me escribe el numero con unos 8 digitos de decimales. Puedo determinar que solo me guarde 2 o 3 decimales solo??? Es que si escribo 2.45 el me escrie por ejemplo 2.44444444449 o algo asi. Me gustaria solo que me guardase el 2.45.

Eso es porque és un double?? Sino que tendria que ser,decimal?

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

La solucion, por lo menos en mysql fue usar el tipo de campo DECIMAL(8,2)

8 ENTEROS Y 2 DECIMALES
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.