int totalOptCount = 500;
int totalRespCount=1500;
float percentage =(float)(totalOptCount/totalRespCount);
なぜこれは常に値0.0を返すのですか?また、これを00.00形式にフォーマットして文字列に変換したいですか?
除算が行われた後に浮動小数点への変換が発生するためです。必要なもの:
float percentage = ((float) totalOptCount) / totalRespCount;
次のような形式でフォーマットできるはずです。
String str = String.format("%2.02f", percentage);
int
の値を使用している場合は、double
を使用する方が適切な選択であり、丸め誤差が少なくなります。 float
はint
値を最大1600万までエラーなしで表すことができます。 double
は、すべてのint
値を正確に表すことができます。
double percentage =(double) totalOptCount / totalRespCount;
通常、パーセンテージは100倍されます。つまり、キャストをドロップできます。
double percentage = 100.0 * totalOptCount / totalRespCount;
整数除算(long、short、byte、char、intを含む)Javaは常にint(またはパラメーターの1つが長い場合はlong)を返し、ゼロに丸めます。変換が行われます。この計算の後。
(書式設定の質問は、他の回答によって既に回答されています-あるいは、Java.text.NumberFormat、特にJava.text.DecimalFormatを見ることができます。)
(totalOptCount/totalRespCount)
ここでは、被除数と除数の両方がint
型です。つまり、整数値のみが許可され、そのような方程式の答えは常に整数リテラルになります。
これを破ると、次のようになります
(double)(500/1500)
実際の計算によると、500/1500は0.33333を返しますが、両方のオペランドがint型であるため、コンパイラはこれを整数リテラルに変換します
(double)(0)
コンパイラーはこれをキャストする命令を受け取ります0
値を2倍にして、0.0
結果として
0.0
そして、@ Zach Janickiが提案するように、結果を任意の形式に変更できます。
両方のオペランドが同じ型の場合、結果も同じ型になることに注意してください
String.format("%2.02f", (float)totalOptCount/totalRespCount);
doubleをフォーマットし、パーセンテージとして出力するには、次を使用できます。
System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%"));