百分比函数计算异常值

时间:2012-09-18 21:19:53

标签: c++

在以下功能中,我收到异常值。

(请不要考虑匈牙利的记法,我遵守旧的规则)

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 )会在图片上显示一条消息。 Screenshot

事情是,
34.000.000 = nMaxHP
33.999.999 = nHP

33.999.999 * 100 = 3.399.999.900
3.399.999.900 / 34.000.000 = 99(或双精度99.99999705882353)

问题是为什么nPercentHP是4294967270?

1 个答案:

答案 0 :(得分:4)

您的计算超出了32位算术最大值。

首先将所有内容转换为双倍