Truncar float o pasar de float a int con dos decimales

Hola a todos, llevo toda la tarde dandole vueltas al tema, no se como puedo pasar un valor float a int:

Tengo varios DS18B20 y un sensor DTH11 y de estos sensores quiero conseguir un valor con solo dos decimales de precisión. Para eso, creo que tengo que pasar de float a int, Pero no puedo utilizar Cast por que se comelos decimales.

int i;
float f;

f = 3.6; 
i = (int) f; // ahora i es 3

En paskal se podia utilizar Entero := Trunc (ValorReal1); pero no encontrado una equivalencia.

Muchas gracias.

para pasar un float a int se utiliza la función "int(x);" donde x es el valor que quieres convertir.
pero si utilizas int() perderas los decimales, solo te regresara la parte positiva.

1 Like

si quieres los dos decimales puedes hacer este truco:

int positivo;
int decimal;
float x;

positivo = int(x);
decimal = int((positivo - x) * 100);

con esto ahora tienes la parte positiva y la parte negativa separadas como tipo entero, solo tendrías que acomodarla apropiadamente en la salida y poner un punto decimal entre estas dos.

1 Like

Continuando con lo que decía ehrja, para separar las partes entera y decimal, también puedes trabajar en fracciones de la unidad (décimas, centésimas...) y realizar el truco a la hora de presentarlas:

float grados=27.56;
int centGrados= grados*100.0; // centGrados=2756

Serial.print(centGrados/100); // Imprime 27
Serial.print(",");
Serial.print(centGrados%100);// Imprime 56
1 Like

Pues no se me avia ocurrido ese truco de trabajar en fracciones, me lo apunto por que me va a ser de gran utilidad.

Muchas gracias a los dos.

Gracias, muy bien pensado.
¿Hay algún truco para cuando la temperatura sea negativa?

No entiendo muy bien tu pregunta. Para números negativos debiera funcionar exactamente igual, siempre y cuando no se te ocurra utilizar unsigned.

huy disculpas, que pelotas, en realidad con positivo refiero a la parte entera.
seguro escribí lo primero que se me vino a la cabeza, y por eso te confundí, disculpas por eso.

Si tienes números negativos también debe funcionar.
//---------------------
Ejemplo
-10.10 * 100 = -1010

//---------------------
saludos.