2010-01-26 17 views
62

Ho bisogno di eseguire un double su un int in Java, ma il valore numerico deve sempre arrotondare per difetto. cioè 99.99999999 -> 99Come eseguire il cast di un double in un int in Java arrotondandolo?

+0

possibile duplicato di [Come convertire float in int con Java] (http://stackoverflow.com/questions/1295424/how-to-convert-float-to-int-with-java) –

+0

Credo che galleggia e i doppi sono diversi tipi di dati in Java. – badpanda

+0

Penso che siano troppo vicini perché entrambi sono primitivi e tipi a virgola mobile. Le risposte sono le stesse e molto probabilmente continueranno a esserlo. –

risposta

116

La trasmissione a un numero intero implica un decimale. Non c'è bisogno di chiamare Math.floor() (supponendo numeri positivi)

Semplicemente typecast con (int), ad esempio:

System.out.println((int)(99.9999)); // Prints 99 

Detto questo, esso ha un comportamento diverso da Math.floor che arrotonda verso negativo infinito (@ Chris Wong)

+22

Nota che 'Math.floor' * fa * produce un risultato diverso per i numeri negativi rispetto a un semplice typecast. – Joey

+3

Dipende da cosa significa OP con "round down". Il cast lo arrotonda "verso il basso" verso zero, mentre Math.floor arrotonda verso l'infinito negativo. –

+5

Si noti inoltre che un int non può rappresentare tutti i valori interi possibili che può una doppia. Se si desidera troncare un valore a precisione doppia, eseguire il cast su un valore intero a 64 bit come lungo. 'System.out.println ((long) (9.9999e300));' –

10
Math.floor(n) 

dove n è un doppio. In effetti questo restituirà un doppio, a quanto pare, quindi assicurati di averlo seguito di seguito.

+2

Non c'è bisogno di pavimentare prima del cast, vedere la risposta di Xorlev. – Mizipzor

+5

@miz: la semantica è diversa per i numeri negativi, però. – Joey

0

Provare a utilizzare Math.floor.

+0

Floor() non necessario. – TBH

16

(int) 99,99999

Sarà 99. Casting un doppio a un int non rotonda, che sarà scartare la parte frazionaria.

+4

+1 per aver menzionato il troncamento. –

26

per trasmettere un doppio a un int e farlo essere arrotondato all'intero più vicino (cioè a differenza del tipico (int)(1.8) e (int)(1.2), che sia "arrotondare" verso 0 e ritorno 1) , aggiungi semplicemente 0,5 allo double che verrà convertito in un int.

Ad esempio, se abbiamo

double a = 1.2; 
double b = 1.8; 

Poi le seguenti espressioni typecasting di x ed y e ritorneremo valori arrotondati-down (x = 1 e y = 1):

int x = (int)(a); // This equals (int)(1.2) --> 1 
int y = (int)(b); // This equals (int)(1.8) --> 1 

Ma aggiungendo 0,5 a ciascuno, otterremo il risultato intero da arrotondato al più vicino che potremmo desiderare in alcuni casi (x = 1 e y = 2):

int x = (int)(a + 0.5); // This equals (int)(1.8) --> 1 
int y = (int)(b + 0.5); // This equals (int)(2.3) --> 2 

Come piccola nota, questo metodo consente inoltre di controllare la sogliaalla quale la double viene arrotondato o giù su (int) typecasting.

(int)(a + 0.8); 

da digitare. Questo arrotonderà fino a (int)a + 1 ogni volta che i valori decimali sono maggiori o uguali a 0,2. Cioè, aggiungendo 0.8 allo double immediatamente prima di typecasting, 10.15 e 10.03 saranno arrotondati per difetto a 10 su (int) typecasting, ma 10.23 e 10.7 saranno arrotondati a 11.

+5

Hai perfettamente ragione, non è così. Ho visto che questo thread si apre quando Google sta cercando "Java int typecast double" e ha pensato che qualcuno che cercava un modo per arrotondare/scendere direttamente con il typecast (int) poteva usarlo. Questo non è pubblicato utilizzando un account stackoverflow (quindi non sto cercando di aumentare la mia reputazione, se è preso sul serio qui), solo cercando di aiutare a diffondere un trucco interessante che uso abbastanza spesso. :) Saluti! – JavaDrip

+4

Bello, ma ricorda che funziona solo con ** positivi ** doppi. Ad esempio, se arrotondi -0,8 con questo trucco, il codice 'System.out.println (" "+ (int) (- 0.8d + 0.5))' stampa 0, invece di -1 come previsto –

5

new Double(99.9999).intValue()

0

provare con questo, questo è semplice

double x= 20.22889909008; 
int a = (int) x; 

this will return a=20 

o provare con questo: -

Double x = 20.22889909008; 
Integer a = x.intValue(); 

this will return a=20 

o provare con questo: -

double x= 20.22889909008; 
System.out.println("===="+(int)x); 

this will return ===20 

può essere questo codice sarà Aiutarti.

Problemi correlati