Go Down

Topic: Función para convetir un float en un String. (Read 11692 times) previous topic - next topic

jalfonsosuarez

Nov 06, 2014, 12:08 am Last Edit: Nov 06, 2014, 12:41 am by jalfonsosuarez
Me he llevado un buen rato buscando y no he encontrado una función que me satizfaga completamente para convertir un float a String, así que he sacado la caja de herramientas de programación y he creado esta función, basándome en dtostrf.

Prototipo de la función:

Code: [Select]

String floatToString( float,int=8,int=2,boolean=true);


Función:

Code: [Select]

// Convierte un float en una cadena.
// n -> número a convertir.
// l -> longitud total de la cadena, por defecto 8.
// d -> decimales, por defecto 2.
// z -> si se desea rellenar con ceros a la izquierda, por defecto true.
String floatToString( float n, int l, int d, boolean z){
 char c[l+1];
 String s;

 dtostrf(n,l,d,c);
 s=String(c);

 if(z){
 s.replace(" ","0");
 }

 return s;
}


Ejemplo:

Code: [Select]

// pruebaFloat.ino

String floatToString( float,int=8,int=2,boolean=true);

void setup() {

  float n = 0.5;

  Serial.begin(115200);
  Serial.println( floatToString(n,6) );

}

void loop() {

}

// Convierte un float en una cadena.
// n -> número a convertir.
// l -> longitud total de la cadena, por defecto 8.
// d -> decimales, por defecto 2.
// z -> si se desea rellenar con ceros a la izquierda, por defecto true.
String floatToString( float n, int l, int d, boolean z){
char c[l+1];
String s;

dtostrf(n,l,d,c);
s=String(c);

if(z){
s.replace(" ","0");
}

return s;
}



Ahí la dejo.

Saludos.

surbyte

#1
Nov 06, 2014, 02:44 am Last Edit: Nov 06, 2014, 03:24 am by surbyte
que tal esto
Code: [Select]
char buffer[5];
String s = dtostrf(myFloat, 1, 4, buffer);


char * dtostrf(
   double __val,
   signed char __width,
   unsigned char __prec,
   char * __s)

jalfonsosuarez

Si te fijas bien, me he basado en esa función, pero con dos particularidades:

1.- Devuelve un String (en vez usar un buffer char -que se usa dentro de la funcion-).
2.- El resltado lo puedes obtener con o sin ceros a la izquierda.

Mas que nada para ahorrar, cada vez que tengo que convertir un float a String con ceros a la izquierda, tener que repetir el mismo código.

Saludos.

surbyte

Tenés razón.. es que busqué y encontré muchas y esa me pareció de las mejores sino la mejor.
Asi que tu solución es muy buena.

xtremixt

Hola se que a pasado mucho tiempo desde que se cerro esto, pero tengo una duda que quizas aca me puedan resolver tengo dos flotantes que quisera meter a travez de sprintf, si utilizo lo que ustedes han expuesto trabaja bien pero solo con una variable, pero la segunda se pierde, me explico mejor tengo un gps que toma la latitud y longitud ambos como flotantes, la idea es enviar un sms con los dos valores a través de sprintf obviamente en un solo mensaje pero no logro crear el empaque para enviarlos, alguna idea, desde ya muchas gracias adjunto el codigo.

float latitude,longitude;

gps.f_get_position(&latitude, &longitude);
gps.stats(&chars, &sentences, &failed_checksum);

char* buffn="";
char* buff="";
  dtostrf(longitude,10,6,buff);
  dtostrf(latitude,10,6,buffn);
  concatenada
   sprintf (string,"Latitud: %d|Longitud: %d| con s ", buffn,buff);
   Serial.println(string);

Hector_A


Cierro el hilo definitivamente!

Xtremixt! Te agradezco mucho (muchísimo) que hayas investigado en el foro pero no está bien que se reviva un hilo de hace dos años atrás.

Por favor, inicia un hilo nuevo explicando detalladamente tu problema completo, sube fotos, sube código, pega URLs en las que hayas investigado, incluyendo este mismo hilo.

Saludos y Gracias!


 ;)

Go Up