因此,我正在计算值,将其快照并发送到间隔中。但是问题在于,它的数量应该大大增加。
以下是计算:
// Set up mob attributes - SNAPSHOT
const mobId = '1';
var mob = {
mhp: (mobId + 10) * 15,
hp: (mobId + 10) * 15,
dmg: (mobId + 2) * 3,
defenseRating: (mobId + 3) * 4,
hitRating: (mobId + 2) * 2,
critRating: (mobId + 3) * 2,
critDmg: (mobId + 2) * 2,
dodgeRating: (mobId + 1) * 3,
firstHitRating: (mobId + 3) * 4,
};
console.log(mob);
我不了解您,但是在哪个世界里11 * 15 =1650。这是在发送间隔之前的计算,因此它不会弄乱那里。最初的计算很奇怪。
注意:可能值得注意的是,我通过套接字事件来执行此操作:
socket.on('fight mob', (mobId) => {
我怀疑这是问题所在,但现在我茫然。
答案 0 :(得分:1)
之所以发生这种情况,是因为您的mobId变量是字符串,而不是数字。
(1 + 10)* 15 = 165
(“ 1” + 10)* 15 = 1650
要解决此问题,您可以使用Number()来强制mobId的类型:
(Number(mobId)+ 10)* 15 = 165
祝你好运!
答案 1 :(得分:1)
由于类型松散,JavaScript在对变量执行操作时会自动尝试更改变量的类型。在您的情况下,django-elasticsearch-dsl
是字符串而不是数字。因此,JavaScript会执行串联操作,而不是附加操作。
所以操作
mobId
由于(mobId + 10) * 15
被mobId
变成了这样的东西:
'1'
同样,JavaScript的类型转换程序开始起作用,但是这次它将字符串转换为数字以进行乘法运算,因此结果变为'110' * 15
。
为减轻压力,请先将1650
转换为数字。为此,请使用mobId
或parseInt
parseFloat