hur.cn - 华软网

 热门搜索

这个负数是怎么来的?

  作者:未知    来源:网络    更新时间:2011/1/10
下载一个资料的时候,想让它边下载边显示一个进度.即下载了百分之几多.

我在接收的Socket接收到资料后,让它与总资料长度举行对照,然后设置Edit的显示值.

然则显示的时候不是从0%到100%.最大只到了30多点,然后就酿成负的,-30左右,然后一直减到0,再增加到30左右,然后完毕..

long igDownLoadTotalFileLens;   //总共需要下载的资料总长度
long igHaveDownFileLens;      //当前已经下载的资料长度
long igFileDownBiLi;  //下载的资料占总的百分比
char strFileDownBiLi[255];; //资料下载百分比

下面是显示的几步..
igFileDownBiLi = igHaveDownFileLens*100/igDownLoadTotalFileLens;   //已下载资料比率
itoa(igFileDownBiLi, strFileDownBiLi, 10);
strcat(strFileDownBiLi,"%");
m_tempDlg->GetDlgItem(IDC_EDITSTATUS)->SetWindowText(strFileDownBiLi);

比如资料是64M,跟的时候下载资料长度到总资料长度3分之1左右的时候,strFileDownBiLi就会第一位成负号了.

这个是由于什么呢?

---华软 网友回答---
单步走一下,看看各个变量的值
---华软网友回复---
由于你的程序有溢出的情况。
你的资料巨细是64M,那么1/3就是21M左右,由于你这行代码
igFileDownBiLi = igHaveDownFileLens*100/igDownLoadTotalFileLens
中,先将一个long类型乘以100,这将致使溢出!由于乘以100后,21M就酿成了2100M,而long型的最大值为
2147483647,即2100M左右,所以就酿成了负数。
解决措施,将此句修改成:
igFileDownBiLi = igHaveDownFileLens*1.0/igDownLoadTotalFileLens*100;这样能够防止溢动身生

---华软网友回复---
引用 2 楼 happyparrot 的回复:
由于你的程序有溢出的情况。
你的资料巨细是64M,那么1/3就是21M左右,由于你这行代码
igFileDownBiLi = igHaveDownFileLens*100/igDownLoadTotalFileLens
中,先将一个long类型乘以100,这将致使溢出!由于乘以100后,21M就酿成了2100M,而long型的最大值为
2147483647,即2100M左右,所以就酿成了……


恩,的确是.谢谢了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。