私は現在、小さなダウンロード マネージャーをコーディングしていますが、ダウンロードの進行状況をパーセントで計算しようとすると、面白い出力が得られます。これは私がそれを計算するために使用するものです:
int progress = (byte_counter * 100) / size;
System.out.println("("+byte_counter+" * 100) = "+(byte_counter * 100)
+" / "+size+" = "+progress);
byte-counter
は int ( から読み取られた合計バイト数をカウントしますInputStream
) でsize
あり、ダウンロードされたファイルの長さ (バイト単位) です。
これは、小さなダウンロードでうまく機能します。しかし、より大きなファイル (40MB) になると、おかしなことが起こり始めます。計算の出力は次のようになります。
[...]
(21473280 * 100) = 2147328000 / 47659008 = 45
(21474720 * 100) = 2147472000 / 47659008 = 45
(21476160 * 100) = -2147351296 / 47659008 = -45
(21477600 * 100) = -2147207296 / 47659008 = -45
[...]
理由はわかりませんが、計算がマイナスになります。通常の Integer は 2 31 -1 までの数値で問題ないはずなので、これは問題の根源ではありません。しかし、何が欠けていますか?