float to int

Standardoil:
Io ho scritto stampare 2 e 3

... credo che ormai birrohgt abbia capito dove è l'errore (ovvero l'arrotondamento che effettua la Serial.print() in funzione dei decimali che stampa) e che la stampa che ha fatto gli sia servita a vedere bene quale era la reale situazione. :slight_smile:

>birrohgt: se ti interessano solo i due decimali, seguendo quanto ti ha indicato Claudio_FF, otterai gli stessi risultati della Serial.print() a DUE decimali se userai, facendo riferimento al mio esempio, la formula scritta così:

vInt = (vFloat + 0.005) * 100.0;

... ovvvero effettuando lo stesso arrotondamento che, probabilmente, effettua la Serial.print() nel caso di due decimali.

Guglielmo

ok ho capito
grazie a tutti per le spiegazioni

Sì: quando calcoli un valore arrotondato, devi prima aggiungere la metà della risoluzione finale. Ad esempio, con una risoluzione finale di 0,01 (due cifre decimali):
0,01/2=0,005;

15,576+0,005=15,581; troncato: 15,58 (viene arrotondato per eccesso).
33,844+0,005=33,849; troncato: 33,84 (viene arrotondato per difetto).