2

long longしたがって、 typeである 2 つの変数を除算しようとしていますtotalBytesWrittentotalBytesExpected

基本的に、ファイルのアップロードが完了したパーセンテージを把握し、それに応じてプログレスバーを更新しようとしています。たとえば、1839948 バイトのうち 262144 を送信しています

しかし、それを実行double progress = totalBytesWritten/totalBytesExpectedすると、予想外の数字が表示されます。NSLog が進行すると、0 のみが表示され、最後に 1 が表示されます。

ありがとう!

4

2 に答える 2

3

整数除算を実行していて、結果が double にキャストされていますが、手遅れです: 既に精度が失われています.2 つのオペランドの 1 つを double にキャストすると、もう 1 つも double に昇格されます結果として浮動小数点値が得られます。

NSLog(@"%f,"(double)totalBytesWritten/totalBytesExpected);
于 2013-06-20T21:49:19.777 に答える
0

long longは非 10 進数のデータ型であるため、整数除算を使用します。したがって、totalBytesWrittenはおそらく (願わくば) より小さいのでtotalBytesExpected、常に 0 になります。最初に に変換してからdouble、除算してみてください。

于 2013-06-20T21:50:43.040 に答える