0

私のプロジェクトには次のコードがあります。

  int percent = 2;
  int count = 10;
  int percentagefill = (percent/10)*count; 
  System.out.println(percentagefill);

基本的に何が起こっているのかというと、パーセントとカウントの2つの変数を設定しています。次に、塗りつぶしの割合を計算します。奇妙な理由で、パーセンテージの塗りつぶしは0になりますが、この場合は2になります。理由は何ですか。前もって感謝します。

4

8 に答える 8

6

intで割ってintも結果は になりintます。この場合:

(percent/10)*count
= (2/10)*10
= (0) * 10 <-- 0.2 is rounded down to 0
= 0

この質問を参照用に読むことができます。また、Java 仕様では、整数除算が 0 に向かって丸められると記載されています。修正に関しては、浮動小数点の精度が問題にならないdouble限り、PaulP.RO が言ったように使用してください。

于 2012-04-23T20:04:19.297 に答える
3

への変換を強制するために、 で割る10.0か、 に変更int percentすることができます。そうしないと、整数除算が行われ、小数部分が切り捨てられます。double percentdouble

関連する質問は次のとおりです。「Java 整数除算、どうやって を生成しdoubleますか?」

于 2012-04-23T20:06:01.763 に答える
3

結果を本当に にする必要がある場合intは、除算の前に乗算を実行して、整数除算でゼロになるのを避けることができます。

int percentagefill = (percent*count)/10;
于 2012-04-23T20:08:51.963 に答える
2

この行を変更します。

int percentagefill = (percent/10)*count; 

に:

double percentagefill = (percent/10.0)*count;

これは浮動小数点演算を使用し ( 10.010 の代わりに のため)、結果をdouble( とは異なり小数点以下の精度を持つ) に格納しintます。

于 2012-04-23T20:05:46.987 に答える
1

他の人が述べたように、整数除算で精度が失われています

解決策はニーズによって異なります。結果が整数である必要がある場合は、最初に乗算します。

int percentagefill = (percent*count)/10;

あなたにとって「十分」かもしれません(正しい答えは四捨五入されます)。

分数の答えを得る必要がある場合は、浮動小数点型に変換する必要があります。

double percentagefill = (percent/10.0)*count;
//                                 ^ the .0 makes this a double,
//                                forcing the division to be a
//                                floating-point operation.
于 2012-04-23T20:11:14.363 に答える
0

修正は簡単です:

  int percent = 2;
  int count = 10;
  double percentagefill = (percent/10.0)*count; 
  System.out.println(percentagefill);
于 2012-04-23T20:07:15.507 に答える
0

これは、double などの浮動小数点データ型を使用する必要があるときに、整数データ型を使用しているためです。このコードは 2.0 になります。

double percent = 2;
double count = 10;
double percentagefill = (percent/10)*count; 
System.out.println(percentagefill);
于 2012-04-24T00:13:32.853 に答える
0

デイブ・ニュートン、あなたの答えは答えだったはずです。:)

整数 2 / 整数 10 = 0. 整数 0 * 整数 10 = 0.

float または double のデータ型が必要です。情報を操作している間は、インタープリターがデータ型の仮定と「キャスト」を行う可能性に常にうんざりしてください。println は干渉を取り、表示のために文字列にキャストします。

私の作業のほとんどは php で行われ、値を操作する場合、0、NULL、ERROR はすべて異なるものであり、予期しない結果が生じる可能性があります。意図した結果を得るために、変数を別のデータ型に明示的にキャストする必要がある場合があります。

于 2012-04-23T20:09:35.830 に答える