floating-point by - Perché la divisione di due numeri interi restituisce 0.0 in Java?




integer example (6)

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.)

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?


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

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

(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.


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;

String.format("%2.02f", (float)totalOptCount/totalRespCount);

Il principale è la classe casuale costruita con lo stesso seme che genererà lo stesso modello di numeri ogni volta.





java floating-point integer-division