collapse

* Links de Robótica

* Posts Recentes

duvidas sobre utilização de um osciloscopio(zito) num circuito básico por vasco
[Hoje às 01:09]


A Paixão da Física Walter Lewin , Warren Goldstein por Njay
[Ontem às 11:45]


Gerar CPL file a partir dos Gerbers? por Hugu
[Ontem às 00:22]


Díodo schottky por SerraCabo
[17 de Agosto de 2017, 21:51]


Ajuda num relógio para termoacumulador por dennis_boy
[17 de Agosto de 2017, 00:07]


Aspiração para CNC por LVirtual
[14 de Agosto de 2017, 17:34]


Ligar motor de drive de DVD por jm_araujo
[14 de Agosto de 2017, 09:25]


Nos primordios da automaçao... por LVirtual
[13 de Agosto de 2017, 10:00]


Placa desconhecida em brinquedo por SerraCabo
[12 de Agosto de 2017, 23:46]


Inquérito sobre a interação humano-robot por Ana Pires
[12 de Agosto de 2017, 20:53]

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