Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/08/2003, 05:00
leonardop
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 21 años, 4 meses
Puntos: 1
Hola,

Bueno, antos que nada, quisiera preguntarte ciertas cosas, ya que no estoy seguro de haber entendido completamente bien tu requerimiento.

* Cuando hablas del campo de tu base de datos, ¿qué es lo que está separado por comas? Supongo que te refieres a que el separador decimal de cada número es una coma, pero podría ser que te estés refiriendo a la separación de varios registros de la base de datos, no sé...

* Al usar un valor float para contener el valor, ¿cómo estás haciendo esa recolección del dato, de la que hablas? ¿Oué tipo de expresiones o sentencias tienes en el código?

* ¿Tienes algún problema con la conexión a la base de datos? Digo, por que mencionas lo de "corregir esa conexión.."

* Adicionalmente, ¿sobre qué sistema operativo trabajas y qué compilador de C++ usas?


Bueno, te voy a presentar un ejemplo que quizás pueda servirte, asumiendo que:

a) Te refieres a almacenar en una variable tipo `float' el contenido de un valor numérico decimal que está disponible inicialmente como una cadena, en donde el separador decimal es la coma. Por ejemplo: 3,1416 (en contraste con 3.1416).

b) La forma como capturas la información en la variable, es mediante una función del tipo sscanf().


Código:
#include <locale.h>
#include <iostream.h>
#include <stdio.h>


#define LOCALE_PROPIO  "es_ES"  /* Localidad que usara este programa */


int
main (void)
{
    const char cadena[] = "3,1416";
    float valor;

    sscanf (cadena, "%f", &valor);
    cout<<"El valor tomado de la cadena "<<cadena<<" es "<<valor<<"\n";

    setlocale (LC_NUMERIC, LOCALE_PROPIO);

    cout<<"\nSe ha establecido la localidad numerica actual como "<<
        LOCALE_PROPIO<<"\n\n";

    sscanf (cadena, "%f", &valor);
    cout<<"El valor tomado de la cadena "<<cadena<<" es "<<valor<<"\n";

    return 0;
}

Este programa se vale de la localidad (aquello que en Inglés se conoce como locale) actual del entorno para mostrar el resultado de capturar en un valor `float' el contenido de la cadena "3,1416".

En el ejemplo, se le asigna a la categoría de localidad LC_NUMERIC el valor "es_ES", código que hace referencia al entorno de configuración de un usuario iberoamericano, en cuyo caso se asume que, por ejemplo, se desea manipular valores numéricos reales usando comas como separadores decimales.

Cabe anotar que este ejemplo en particular lo he probado en mi equipo, en un entorno Unix, con el compilador g++. Claro está, es necesario que el entorno esté configurado correctamente, en el sentido en que la localidad es_ES debe ser reconocida por el sistema. Puede que necesite de algunos retoques si desea usarse en otro tipo de sistema o con otro compilador. Esta es la salida que produce en mi máquina:

Código:
$ g++ -W -Wall -o numerico numerico.cpp
$ ./numerico
El valor tomado de la cadena 3,1416 es 3
 
Se ha establecido la localidad numerica actual como es_ES
 
El valor tomado de la cadena 3,1416 es 3,1416
Un cordial saludo