convertire doppio in intero in java

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.

Soluzione

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)

Commentari (3)

Per il tipo di dati da Double a int, potete usare il seguente:

Double double = 5.00;

int integer = double.intValue();
Commentari (2)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

Risolto il mio scopo.

Commentari (0)