Problema com formatação de um float.

Olá galera.
Estou com o seguinte problema:

tenho uma variável do tipo float que recebe um valor com varias casas decimais, preciso pegar este valor e coloca-lo em uma outra variável com apenas 3 casas decimais. Porque posteriormente vou concatenar este valor em uma String. Preciso concatenar este valor em uma String porque preciso primeiro formar uma frase completa para depois ser imprimida (no casso transmitida via Xbee), e esta mensagem não pode ser dividida em pedaços porque irá ter vários dispositivos xbee comunicando ao mesmo tempo e o xbee coordenador tem que processar a mensagem por completa,então se ela se for enviada por pedaços a mensagens iram se misturar.

Para mostrar melhor o que preciso irei colocar um código simples explicando o que preciso e o que não estou conseguindo fazer.

Supondo que o (float a) e o (float b) sejam o resultado de leitura de 2 sensores e que eu necessite fazer uma operação de divisão entre os dois valores. é importante que o resultado dessa operação tenha 3 casas decimais. Após ter esse resultado neste formato devo encapsular o mesmo em uma frase para ser transmitida de uma vez. Fiz o seguinte código para ilustrar:

float a = 0.267489489573;
float b= 0.48249204902;
float res=0;
 String mensagem="";
void setup(){
  Serial.begin(9600);
}
void loop(){
  res= a/b;// o problema é que esta operação está me retornando um valor com apenas duas casas                                                                          
                //  decimais res= 0.55, necessito que o mesmo tenha 3 casas decimais res=0,554.
  mensagem +=" o resultado: ";
  mensagem += res;
  mensagem += " cuidado, perigo!";
  Serial.println(mensagem);
  mensagem="";
  delay(1000);
}

o problema é que esta operação está me retornando um valor com apenas duas casas decimais res=0.55, necessito que o mesmo tenha 3 casas decimais res=0,554. para depois encapsular este resultado em uma frase para depois imprimi-la por completa, conforme o código acima.

1 Like

Alguém consegue me ajudar?

Bem, para exibir no monitor serial o valor com uma determinada quantidade de casas decimais, bastaria fazer o seguinte:

Serial.println(res,4);

Isso mostraria o valor: 0.5544 em seu monitor. A operação não retorna só duas casas decimas, ela retorna o que "couber" em sua variável float "res". Se trocar o "4" por "10", teria o seguinte:

Serial.println(res,10);

res: = 0.5543914794

Jeff_85:
Bem, para exibir no monitor serial o valor com uma determinada quantidade de casas decimais, bastaria fazer o seguinte:

Serial.println(res,4);

Isso mostraria o valor: 0.5544 em seu monitor. A operação não retorna só duas casas decimas, ela retorna o que "couber" em sua variável float "res". Se trocar o "4" por "10", teria o seguinte:

Serial.println(res,10);

res: = 0.5543914794

Adicionalmente, já que deseja que sua mensagem apareça com as 4 casas decimas com o seu exemplo de código, tente a seguinte substituição:

mensagem += String (res, 4);
2 Likes

Muito obrigado, Jeff_85 Deu certo está forma que você mencionou de utilizar: mensagem += String (res, 4);

Tinha tentado outras formas de encapsular este valor no formato falado mas não tinha dado certo.
muito obrigado novamente.

1 Like

E se... enviasses a variável em formato binário? 4 bytes e o valor chegava a todo o lado inalterado... não seria melhor?