在以下函数中,我收到异常值。
(请不要相信匈牙利符号,我遵循的是旧资料规则)
int nMaxHP = m_pDefender->GetMaxHitPoint();
u_long nPercentHP = 0;
if( nMaxHP > 0 )
nPercentHP = ( nHP * 100 ) / nMaxHP;
CString show;
show.Format( "%u %d %d", nPercentHP, nMaxHP, nHP );
pUserAttacker->AddTextD3D( show, 0xffff0000 );
这是游戏客户端上伤害代码的一部分,
m_pDefender
是大狮子支柱,nHP
是他受到伤害后的生命值,nMaxHP
是不言自明的。AddTextD3D( CString format, DWORD color )
显示一条消息,如您在图像上看到的。事情是,
34.000.000 = nMaxHP
33.999.999 = nHP
33.999.999 * 100 = 3.399.999.900
3.399.999.900 / 34.000.000 = 99(或 double 为99.99999705882353)
问题是,为什么
nPercentHP
是4294967270? 最佳答案
您的计算超出了32位算术最大值。
首先将所有内容转换为两倍
关于c++ - 百分比函数计算异常值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12485205/