5

私の論理が間違っていると思います…。

私が持っているループで:

int seconds = (int) (elapsed.TotalSeconds / ItemPos) * (Count - ItemPos);

このループは、約 1 秒に 1 回更新されます....

私が抱えている問題は、秒が常にゼロ (0) の値になることです。

これは、ItemPos最初のループの後、値が よりも常に高いためですelapsed.TotalSeconds

たとえば、次のようになります。

3秒経ったら

ItemCount = 20 , so 3/20 = 0.15 - rounds to zero.... 0 * anything = 0......

私は何を間違っていますか?

4

2 に答える 2

8

あなたの式は次のように解釈されます

( (int)(elapsed.TotalSeconds / ItemPos) ) * (Count - ItemPos);

型キャストを遅らせる必要があります。必要なのは、次の追加のペアだけです()

 //int seconds = (int)   (elapsed.TotalSeconds / ItemPos) * (Count - ItemPos)  ;
   int seconds = (int) ( (elapsed.TotalSeconds / ItemPos) * (Count - ItemPos) );
于 2013-07-15T16:26:32.100 に答える
6

整数除算は常に int を返し、結果が 0.something になると、0 に切り捨てられます。

何かを真の価値にすれば、問題ありません。または、除算する前に乗算します。

int seconds = (int) ((float)elapsed.TotalSeconds / ItemPos) * (Count - ItemPos);

(下記参照)

また

 int seconds = (int) (elapsed.TotalSeconds * (Count - ItemPos) / ItemPos);

編集

dtb のコメントに基づいて、型キャストを間違った場所に置いたことに気付きました。最初の行は機能しません (ただし、2 番目の行は機能します)。何が起こっているかというと、TotalSeconds から double 値を取得し、それを で割ってint ItemPosdouble を取得しています。Henk Holterman が言ったように、型キャストが部門全体に及ぶように、余分な括弧を追加する必要があります。

 int seconds = (int) ((elapsed.TotalSeconds / ItemPos) * (Count - ItemPos));
于 2013-07-15T16:26:26.967 に答える