Eventuali duplicati:
round() for float in C++C++: come arrotondare un doppio a un int?
Ho una doppia (lo chiamano x), destinato a essere 55 ma in realtà memorizzato come 54,999999999999943157 che ho appena realizzato.
Così, quando lo faccio
double x = 54.999999999999943157;
int y = (int) x;
y = 54 invece di 55!
Questo mi ha lasciato perplesso a lungo. Come faccio a farlo girare correttamente?
È possibile aggiungere 0,5 al numero e quindi eseguire il cast per lasciarlo troncare a un int. Hai bisogno di arrotondare i numeri negativi? – Blastfurnace
È possibile utilizzare questa definizione del preprocessore: '#define ROUND_2_INT (f) ((int) (f> = 0.0? (F + 0.5): (f - 0.5)))' – c00000fd
In realtà 54.999999999999943157 è 8 ULP sotto _exactly rappresentable_ 55 se per 'double' intendi binary64 da IEEE 754. Quindi non è così che 55 è effettivamente memorizzato, è la conseguenza di quanto il tuo calcolo fosse impreciso. – Ruslan