winforms 如何计算已下载的文件大小占总大小的比例?

dvtswwa3  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(122)
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e, Stopwatch sw)
{
    string downloadProgress = e.ProgressPercentage + "%";
    string downloadSpeed = string.Format("{0} MB/s", (e.BytesReceived / 1024.0 / 1024.0 / sw.Elapsed.TotalSeconds).ToString("0.00"));
    string downloadedMBs = Math.Round(e.BytesReceived / 1024.0 / 1024.0) + " MB";
    string totalMBs = Math.Round(e.TotalBytesToReceive / 1024.0 / 1024.0) + " MB";
    
    string progress = $"{downloadedMBs}/{totalMBs} ({downloadProgress}) @ {downloadSpeed}"; // 10 MB / 100 MB (10%) @ 1.23 MB/s
    lblDownloadProgress.Text = progress;
    textProgressBar1.Value = e.ProgressPercentage;
    textProgressBar1.CustomText = progress;
}

我可以通过断点看到e.BytesReceivede.TotalBytesToReceive的变量值正在更改,但在progress变量上,downloadedMBstotalMBs的值始终为0。
编辑:
导致问题的值示例:
第一个月第四个月第一个月:2196
194899年

cu6pst1q

cu6pst1q1#

您为e.TotalBytesToReceive194899)和e.BytesReceived2196)报告的值小于1024.0*1024.0==1048576.0的一半。
因此当你用1024.0除它们两次
(相当于除以1024.0*1024.0==1048576.0),得到的值小于0.5,使用Math.Round进行四舍五入时,给予0
您可以将所有计算保留在double s中,或者指定您感兴趣的小数点后的位数,作为Math.Round的第二个参数。
请参阅文件中的。
例如,如果您对小数点后的3位数感兴趣,您可以用途:

long bytesReceived = 2196;
long totalBytesToReceive = 194899;

//------------------------------------------------------------------V--------------------
string downloadedMBs = Math.Round(bytesReceived / 1024.0 / 1024.0,  3).ToString() + " MB";
string totalMBs = Math.Round(totalBytesToReceive / 1024.0 / 1024.0, 3).ToString() + " MB";

Console.WriteLine("downloadedMBs: " + downloadedMBs);
Console.WriteLine("totalMBs: " + totalMBs);

输出量:

downloadedMBs: 0.002 MB
totalMBs: 0.186 MB

相关问题