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

これが常に値 0.0 を返すのはなぜですか? また、これを 00.00 形式にフォーマットして文字列に変換したいですか?

4

6 に答える 6

109

float への変換は、除算が行われた後に行われるためです。必要なもの:

float percentage = ((float) totalOptCount) / totalRespCount;

次のようなものを使用してフォーマットできるはずです。

String str = String.format("%2.02f", percentage);
于 2011-02-08T10:29:56.143 に答える
22

int値を使用している場合は、a を使用するdouble方が適切な選択であり、丸め誤差が少なくなる可能性があります。 最大 1600 万までエラーなしで値をfloat表すことができます。すべての値を正確に表すことができます。intdoubleint

double percentage =(double) totalOptCount / totalRespCount;

パーセンテージは通常 100 倍されます。つまり、キャストを削除できます。

double percentage = 100.0 * totalOptCount / totalRespCount;
于 2011-02-08T11:23:39.553 に答える
3

Java の整数除算 (long、short、byte、char、int を含む) は、常に int (または、パラメーターの 1 つが long の場合は long) を返し、ゼロに丸めます。この計算の後に変換が行われます。

(フォーマットに関する質問は、他の回答によって既に回答されています。代わりに、java.text.NumberFormat、特に java.text.DecimalFormat を参照することもできます。)

于 2011-02-08T10:41:37.303 に答える
2
String.format("%2.02f", (float)totalOptCount/totalRespCount);
于 2011-02-08T10:31:18.433 に答える
1

double をフォーマットしてパーセンテージとして出力するには、次を使用できます

System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%"));
于 2015-06-16T02:33:05.907 に答える