问一个程序设计上的问题

假如游戏中有一个玩家,生命值为139。
现在他手里有一把武器,武器除了有攻击力外,还有一个特殊的技能,增加玩家10%的HP上限。
也就是说玩家拿着这把武器的时候,生命值应该是139×1.1=152.9,取下武器的时候,生命值又应该恢复到139。
但是由于生命值一般都是整数,所以拿着武器HP应该是152,如果取下武器的时候152÷1.1=138.18,取整数为138,这样就不是原来的139了,因为精度丢失了。

目前我的解决办法是:武器也有一个生命值,生命值为0,技能如果是增加玩家10%的HP上限的话,那么武器的生命值应该是0+玩家生命值×0.1,也就是0+139×0.1=13(取整数)
玩家总生命值应该是139+13=152。
当玩家取下武器,或者换别的没有特殊技能的武器,就算加上武器的生命值,也是139+0,还是139。

这样就解决计算精度丢失的问题,但这就造成数值太分散,假如玩家有魔法值这个属性,武器也得增加一个魔法值,玩家有防御力,武器也要增加防御力这个属性
也就是:
玩家HP=自身HP+武器HP+装备HP+其他装备HP
玩家MP=自身MP+武器MP+装备MP+其他装备MP
玩家XXX=自身XXX+武器XXX+装备XXX+其他装备XXX

感觉这样设计不是很好,请问有别的比较好的方法解决这种技能加成的问题吗?

属性设置为float
通过ui展示时显示整数

— Begin quote from ____

引用第1楼aillieo于2015-09-30 11:52发表的 :
属性设置为float
通过ui展示时显示整数 http://www.cocoachina.com/bbs/job.php?action=topost&tid=325804&pid=1401438

— End quote

那还有个问题:
假如玩家HP是100,手上有一把武器,特殊技能是玩家HP翻倍,也就是玩家生命值=100×2=200
然后玩家手上还有一个盾牌,特殊技能是增加玩家100点生命值,也就是,玩家生命值=200+100=300
当玩家取下武器的时候,就需要除以2,也就是300÷2=150
当玩家再取下盾牌的时候,又减去100的HP,也就是150-100=50,这就不是原来的100了

但如果用我之前说的那个方法,把HP分散开来,就不会有这个问题:
玩家总HP=自身HP + 武器HP+玩家自身HP×100% + 盾牌HP+100=100+0+100+0+100=300
取下武器后,玩家HP=自身HP+盾牌HP+100=100+0+100=200
取下盾牌后,玩家HP=自身HP=100

我的想法是这样的 你要定义明确的逻辑关系 武器和盾的这两个buff是独立的 还是有优先级的 或者说是按照时间先后顺序计算的 每当得到或失去一种buff时 需要根据上边说的这个逻辑关系整理一遍剩余的buff 根据原始属性和现有buff得到表现出来的属性

我觉得,角色的实际HP,应该在装备变化时重新计算一次,
而不应该,在当前HP的基础上,对这个变化的Buff 做一次计算。

把各种基础数值 放在程序里用变量存储 最终值在程序中根据基础值通过公式算