collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Float to String  (Lida 8389 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.372
    • 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.372
    • 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.372
    • 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.372
    • 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.372
    • 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.372
    • 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