DWORD 数据运算问题

inforF 2010-04-29 11:48:22
DWORD dwTotalWrite = 0;
DWORD dwWrite = 102399;
DWORD dwFileSize = 51199500;
DWORD dwPercent = 0;
while(dwTotalWrite = dwFileSize )
{
dwTotalWrite += dwWrite;
dwPercent = (dwTotalWrite*100)/dwFileSize;
}

工作环境是vs2005 unicode

为什么算到最后dwPercent 不是100

单步跟踪走了下 当dwTotalWrite为43000000的时候

dwPercent 变成了0

在线等!!!!!!!!!
...全文
437 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
inforF 2010-04-29
  • 打赏
  • 举报
回复
结贴,多谢各位的指点

提前祝大家51快乐
inforF 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 niuxiaojia09 的回复:]

想要更大,为什么不用LONGLONG或ULONGLONG呢,64bit的。肯定够用
[/Quote]

哦 多谢 呵呵
  • 打赏
  • 举报
回复
想要更大,为什么不用LONGLONG或ULONGLONG呢,64bit的。肯定够用
inforF 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 littlefangmfc 的回复:]

晕,C/C++ code
DWORD dwTotalWrite = 0;
DWORD dwWrite = 102399;
DWORD dwFileSize = 51199500;
DWORD dwPercent = 0;
while(dwTotalWrite != dwFileSize )
{
dwTotalWrite += dw……
[/Quote]

那个while是笔误 写错了。

这样会一直是0吧 直到最后才是100% 因为DWORD不能表示小数。。。
inforF 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yincheng01 的回复:]

DWORD 类型问题,你好好看下
[/Quote]
现在处理办法:dwPercent = dwTotalWrite/(dwFileSize/100)

不过当dwFileSize > 43亿的时候

上面的办法也没用了啊

不过又想到可以用

dwPercent = (dwTotalWrite/10)/(dwFileSize/1000)

呵呵

不过还没看到单个文件大于4G的

wangli820 2010-04-29
  • 打赏
  • 举报
回复
溢出, dwTotalWrite 超出了能表示数据的范围
littlefangMFC 2010-04-29
  • 打赏
  • 举报
回复
晕,
	DWORD dwTotalWrite = 0;
DWORD dwWrite = 102399;
DWORD dwFileSize = 51199500;
DWORD dwPercent = 0;
while(dwTotalWrite != dwFileSize )
{
dwTotalWrite += dwWrite;

dwPercent = (dwTotalWrite/dwFileSize)*100;
}
littlefangMFC 2010-04-29
  • 打赏
  • 举报
回复
你的while循环的条件写错了吧dwTotalWrite = dwFileSize ?这是赋值语句啊,你的while成死循环了?
ls上说了DWORD的范围为 0~4294967295,乘以100溢出了,改成
	DWORD dwTotalWrite = 0;
DWORD dwWrite = 102399;
DWORD dwFileSize = 51199500;
DWORD dwPercent = 0;
while(dwTotalWrite != dwFileSize )
{
dwTotalWrite += dwWrite;

dwPercent = (dwTotalWrite/dwFileSize)*100;
}
Eleven 2010-04-29
  • 打赏
  • 举报
回复
DWORD
32-bit unsigned integer. The range is 0 through 4294967295 decimal.

This type is declared in WinDef.h as follows:


typedef unsigned long DWORD;
inforF 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yincheng01 的回复:]

DWORD 类型问题,你好好看下
[/Quote]

哦,还是范围问题!
尹成 2010-04-29
  • 打赏
  • 举报
回复
DWORD 类型问题,你好好看下

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧