int totalOptCount = 500;
int totalRespCount=1500;
float percentage =(float)(totalOptCount/totalRespCount);
Pourquoi cela renvoie-t-il toujours la valeur 0,0? Aussi je veux formater cela au format 00.00 et convertir en chaîne?
Parce que la conversion en float a lieu après la division. Vous avez besoin:
float percentage = ((float) totalOptCount) / totalRespCount;
Vous devriez pouvoir formater en utilisant quelque chose comme:
String str = String.format("%2.02f", percentage);
Si vous utilisez des valeurs int
, l'utilisation d'un double
peut être un meilleur choix et avoir moins d'erreur d'arrondi. float
peut représenter des valeurs int
sans erreur jusqu'à ~ 16 millions. double
peut représenter avec précision toutes les valeurs de int
.
double percentage =(double) totalOptCount / totalRespCount;
Les pourcentages sont généralement multipliés par 100, ce qui signifie que vous pouvez supprimer le plâtre.
double percentage = 100.0 * totalOptCount / totalRespCount;
Division entière (qui inclut long, short, byte, char, int) dans Java renvoie toujours un int (ou long, si l'un des paramètres est long), arrondi à zéro. Votre conversion se produit après ce calcul.
(La question de formatage est déjà répondue par les autres réponses - vous pouvez également consulter Java.text.NumberFormat, spécialement Java.text.DecimalFormat.)
(totalOptCount/totalRespCount)
ici, le dividende et le diviseur sont de type int
ce qui signifie qu'ils n'autoriseront que des valeurs entières et la réponse de cette équation sera toujours un littéral entier.
si je casse ce sera quelque chose comme ci-dessous
(double)(500/1500)
Selon le calcul réel, 500/1500 vous donnera 0,33333 mais le compilateur le convertira en littéral entier car les deux opérandes sont de type int
(double)(0)
Le compilateur reçoit une instruction pour convertir ce 0
valeur à doubler pour obtenir 0.0
à la suite
0.0
puis vous pouvez modifier le résultat dans n'importe quel format tel que suggéré par @Zach Janicki.
gardez à l'esprit si les deux opérandes sont du même type que le résultat sera également du même type.
String.format("%2.02f", (float)totalOptCount/totalRespCount);
pour formater un double et imprimer en pourcentage, vous pouvez utiliser
System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%"));