collapse

* Posts Recentes

Cerca eléctrica por SerraCabo
[14 de Junho de 2025, 23:26]


Alguém arranja motores? por almamater
[10 de Junho de 2025, 22:34]


Condensador 4.7uF 0603 por brunus
[09 de Junho de 2025, 15:52]


+ LASERs por dropes
[30 de Maio de 2025, 23:11]


Lenovo IdeaPad 3 Não liga por jm_araujo
[07 de Maio de 2025, 19:10]


Identificar Diodo Zenner por filjoa
[01 de Maio de 2025, 23:07]


Meu novo robô por dropes
[18 de Março de 2025, 14:51]


JBL partybox On-The-Go por almamater
[21 de Fevereiro de 2025, 23:32]


Talking Reverse Engineering with an Absolute Legend! por SerraCabo
[13 de Fevereiro de 2025, 09:56]


Motoserra Stihl 120C por brunus
[11 de Fevereiro de 2025, 16:29]

Autor Tópico: Float to String  (Lida 12769 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Float to String
« em: 06 de Fevereiro de 2010, 23:14 »
Bem não sei se é cansaço ou burrice minha mas estou com dificuldade em transformar valores float (temperatura) em string.

eu fiz esta função :

Código: [Seleccione]
void floatToStr(char * outstr, float value, int places) {
  dtostrf(value,sizeof(value),places,outstr);
}

mas o que acontece é que os valores ficam arredondados! isto é eu quero que apareca a temperatura no lcd apenas com uma casa decimal e quando faço isso:

Código: [Seleccione]
char StrTemp[20];

lcd.printIn( floatToStr(StrTemp, temperatura, 1) ;
 

no lcd realmente aparece a temperatura com 1 digito, mas o valor dele não é real.

Alguém sabe de outra função que posso transformar Float em String e retirar digitos do float.
 :-\
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Float to String
« Responder #1 em: 06 de Fevereiro de 2010, 23:26 »
Não conheço a dtostrf(), mas de certeza que é sizoef(value) e não o tamanho de outstr?

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #2 em: 06 de Fevereiro de 2010, 23:35 »
Bem deixa-me ver. Eles dizem que é o "width". portanto deve ser o tamanho do valor ? certo.

Citar
The dtostre() function returns the pointer to the converted string s.

char* dtostrf   (   double    __val,
signed char    __width,
unsigned char    __prec,
char *    __s   
)         
The dtostrf() function converts the double value passed in val into an ASCII representationthat will be stored under s. The caller is responsible for providing sufficient storage in s.

Conversion is done in the format "[-]d.ddd". The minimum field width of the output string (including the '.' and the possible sign for negative values) is given in width, and prec determines the number of digits after the decimal sign. width is signed value, negative for left adjustment.

The dtostrf() function returns the pointer to the converted string s.

aprendi aqui: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #3 em: 07 de Fevereiro de 2010, 00:08 »
Bem experimentei assim :

Citar
char StrTemp[6]; // 000.00
floatToStr(StrTemp,MaxTempExt,1);
lcd.printIn(StrTemp);


// ****************************************************************************************************
//
// Funcao: floatToStr - Transforma a variavel float em string
// Retorno: nada (guarda numa variavel de array char []
//
// ****************************************************************************************************
void floatToStr(char * outstr, float value, int places) {
  dtostrf(value,sizeof(value),places,outstr);
}

e o resultado foi este:

Citar
Temperatura Ambiente: 21.75 C
MaxTemp:21.75 lcd:21.8
MinTemp:21.75 lcd:21.8

Temperatura Ambiente: 21.69 C
MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7

MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7

MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7

MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7

MaxTemp:21.75 lcd:21.8
MinTemp:21.69 lcd:21.7


A função arredonda a casa decimal, para cima ou para baixo...Acho que posso viver com isto assim para já  ::)
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.378
    • Tiago Rodrigues
Re: Float to String
« Responder #4 em: 07 de Fevereiro de 2010, 01:36 »
Feito à pressa mas creio que é isto que queres:

Código: [Seleccione]
void floatToStr(char *s, float value, int place, char separator){
*s = "" + (int)value + separator + (int)((value%1)*(10*places));
}

Exemplo de chamada:

Código: [Seleccione]
floatToStr(stringDestino, 10.43324, 1, ",");
//deve de retornar "10,4" mas as horas que são já não prometo nada.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #5 em: 07 de Fevereiro de 2010, 02:11 »
Dá me invalid conversion from 'const char*' to 'char'  :-[

Código: [Seleccione]
char StrTemp[6];

floatToStr(StrTemp, MaxTempExt, 1, ".");

void floatToStr(char * outstr, float value, int place, char separator){
*outstr = "" + (int)value + separator + (int)((value%1)*(10*places));
}
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.378
    • Tiago Rodrigues
Re: Float to String
« Responder #6 em: 07 de Fevereiro de 2010, 02:13 »
Código: [Seleccione]
floatToStr(stringDestino, 10.43324, 1, ","); está errado, é
Código: [Seleccione]
','

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #7 em: 07 de Fevereiro de 2010, 02:15 »
Lol agora dá-me

 invalid operands of types 'float' and 'int' to binary 'operator%
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.378
    • Tiago Rodrigues
Re: Float to String
« Responder #8 em: 07 de Fevereiro de 2010, 02:17 »
Experimenta isto mas é só para despiste:
Código: [Seleccione]
*outstr = "" + (int)value + separator + (int)((value % 1.0)*(10*places));

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #9 em: 07 de Fevereiro de 2010, 02:18 »
dá o mesmo erro
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.378
    • Tiago Rodrigues
Re: Float to String
« Responder #10 em: 07 de Fevereiro de 2010, 02:23 »
Vai uma martelada mas por agora o que queres é isso a trabalhar...
Código: [Seleccione]
*outstr = "" + (int)value + separator + (int)((value-(int)value)*(10*places));
Ui que até me doi.. o GCC optimiza :P

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.378
    • Tiago Rodrigues
Re: Float to String
« Responder #11 em: 07 de Fevereiro de 2010, 02:24 »
Não é "places", é "place"

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #12 em: 07 de Fevereiro de 2010, 02:28 »
Sim mas dá erro:

Código: [Seleccione]
void floatToStr(char * outstr, float value, int places, char separator){
  *outstr = "" + (int)value + separator + (int)((value-(int)value)*(10*places));
}

 invalid conversion from 'const char*' to 'char'
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.378
    • Tiago Rodrigues
Re: Float to String
« Responder #13 em: 07 de Fevereiro de 2010, 02:30 »
Tira daqui o pointer:
Código: [Seleccione]
void floatToStr(char * outstr, float value, int places, char separator){
  outstr = "" + (int)value + separator + (int)((value-(int)value)*(10*places));
}
preguicite aguda n me apetece pensar... a ver se me vou deitar.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Float to String
« Responder #14 em: 07 de Fevereiro de 2010, 02:31 »
Como é string posso passar os valor com isto?

strcat(outstr,(int)value);
strcat(outstr,separator);
strcat(outstr,(int)((value-(int)value)*(10*places)));
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas