La siguiente función recibe una cadena, elimina de la misma todos los caracteres que no sean números y regresa un double.
Acepta el caracter – al principio de la cadena para indicar números negativos y un punto para separar decimales (sólo se acepta el primer punto que contenga la cadena)
Ejemplo: Si la función recibe la cadena “5-A-6200″, regresará un double cuyo valor será 56200.
Si la cadena no se puede convertir a un número, la función regresa el número cero.
double __fastcall TForm1::ConvierteANumero(String s_cadena)
{
String s_aux="";
bool bl_negativo=false;
// Si la cadena que recibe está vacia, regresa 0
if (s_cadena=="")
s_aux="0";
else
{
// Checa el primer caracter para ver si es el signo menos
if (s_cadena.SubString(1,1)=="-")
bl_negativo=true;
// Va recorriendo la cadena que recibe y pasando a s_aux sólo los números y el punto
for (int i_x=1;i_x <=s_cadena.Length();i_x++)
{
if (s_cadena.SubString(i_x,1)>= '0' && s_cadena.SubString(i_x,1)<= '9')
s_aux=s_aux+s_cadena.SubString(i_x,1);
else
{
// Si el caracter es un punto, verifica que no exista ya un punto en la cadena
if (s_cadena.SubString(i_x,1) == '.' && s_aux.Pos('.')==0)
s_aux=s_aux+s_cadena.SubString(i_x,1);
}
}
}
if (bl_negativo)
s_aux="-"+s_aux;
// Si la cadena resultante está vacia, segnifica que s_cadena no contenía ningún número, sólo caracteres. así que se convierte a 0
if (s_aux.IsEmpty())
s_aux="0";
else
if (s_aux.Length()==1 && !(s_aux >= '0' && s_aux <= '9'))
s_aux="0";
return s_aux.ToDouble();
}
Etiquetas: convertir cadena a numero en c++ builder, string a double