example - Perché la divisione di due numeri interi restituisce 0.0 in Java?




java integer division example (4)

Questa domanda ha già una risposta qui:

int totalOptCount = 500;
int totalRespCount=1500; 
float percentage =(float)(totalOptCount/totalRespCount);

Perché restituisce sempre il valore 0.0? Voglio anche formattarlo nel formato 00.00 e convertirlo in stringa?


(totalOptCount/totalRespCount)

qui sia il dividendo che il divisore sono di tipo int che significa che permetteranno solo valori interi e la risposta di tale equazione sarà sempre un intero letterale.

se lo rompo sarà qualcosa di simile in basso

(double)(500/1500)

Secondo il calcolo effettivo, 500/1500 ti darà 0.33333 ma il compilatore convertirà questo in letterale intero perché entrambi gli operandi sono di tipo int

(double)(0)


Il compilatore riceve un'istruzione per convertire questo valore 0 in raddoppio in modo da avere 0.0 come risultato

0.0

e quindi è possibile modificare il risultato in qualsiasi formato come suggerito da @Zach Janicki.

tieni presente che se entrambi gli operandi sono dello stesso tipo del risultato sarà dello stesso tipo.


La divisione intero (che include long, short, byte, char, int) in Java restituisce sempre un int (o long, se uno dei parametri è lungo), arrotondando verso lo zero. La conversione avviene dopo questo calcolo.

(Alla domanda di formattazione viene già data risposta dalle altre risposte, in alternativa si può anche dare un'occhiata a java.text.NumberFormat, specialmente java.text.DecimalFormat.)


Se si utilizzano valori int , l'utilizzo di un double può essere una scelta migliore e avere un errore di arrotondamento inferiore. float può rappresentare valori int senza errori fino a ~ 16 milioni. double può rappresentare accuratamente tutti i valori int .

double percentage =(double) totalOptCount / totalRespCount;

Le percentuali sono generalmente moltiplicate per 100, il che significa che puoi lasciare il cast.

double percentage = 100.0 * totalOptCount / totalRespCount;

per formattare un doppio e stampare come percentuale, puoi usare l'uso

System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%"));




integer-division