In Java, voglio convertire un doppio in un intero, so se lo fate:
double x = 1.5;
int y = (int)x;
si ottiene y=1. Se fai così:
int y = (int)Math.round(x);
Probabilmente otterrete 2. Tuttavia, mi sto chiedendo: dato che le rappresentazioni doppie degli interi a volte appaiono come 1.9999999998 o qualcosa del genere, c'è una possibilità che il casting di un doppio creato tramite Math.round() risulterà ancora in un numero troncato verso il basso, piuttosto che il numero arrotondato che stiamo cercando (cioè: 1 invece di 2 nel codice come rappresentato) ?
(e sì, lo intendo proprio come tale: C'è qualsiasi valore per x, dove y mostrerà un risultato che è una rappresentazione troncata piuttosto che arrotondata di x?)
Se sì: c'è un modo migliore per trasformare un doppio in un int arrotondato senza correre il rischio del troncamento?
Ho capito una cosa: Math.round(x) restituisce un long, non un double. Quindi: è impossibile che Math.round() restituisca un numero che assomigli a 3.9999998. Pertanto, int(Math.round()) non avrà mai bisogno di troncare nulla e funzionerà sempre.
c'è una possibilità che il casting di un doppio creato tramite Math.round()
risulterà ancora in un numero troncato in basso
No, round()
arrotonderà sempre il tuo doppio al valore corretto, e poi, sarà lanciato in un long
che troncherà qualsiasi posto decimale. Ma dopo l'arrotondamento, non rimarrà alcuna parte frazionaria.
Qui ci sono i documenti di Math.round(double)
:
restituisce il lungo più vicino all'argomento. Il risultato è arrotondato ad un intero aggiungendo 1/2, prendendo il pavimento del risultato e fondendo il risultato al tipo long. In altre parole, il risultato è uguale al valore dell'espressione:
(long)Math.floor(a + 0.5d)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
Risolto il mio scopo.