Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Сложение и вычитание, получаются разные значения! (https://javascript.ru/forum/dom-window/60402-slozhenie-i-vychitanie-poluchayutsya-raznye-znacheniya.html)

serebann 27.12.2015 11:28

Сложение и вычитание, получаются разные значения!
 
Подскажите, почему при вычитание (-) всё срабатывает правильно
А при сложении (+) просто прибавляется ещё одно число к существующему.
Проверить как это работает можете на странице:
http://payforyou.top/limit.php

А вот код:
<script>

window.onload = function(){


document.getElementById('button').onclick = function() {
var balanc = "20";
var gamebalanc = "3819430";


var bits = document.getElementById("bits").value;
var stav = document.getElementById("stav").value;



function randomInteger(min, max) {
var rand = min + Math.random() * (max - min);
rand = Math.round(rand);
return rand;
}
var sum = ( randomInteger(0, 100) )

if (balanc > bits) {
if (stav < sum) {
var resbits = bits * 2;
var newuserbal = balanc + resbits;
var newgamebal = gamebalanc - resbits;
}
if (stav > sum) {
var newuserbal = balanc - bits;
var newgamebal = gamebalanc + bits;
}
}


document.getElementById('userbal').innerHTML=newuserbal;
document.getElementById('gamebal').innerHTML=newgamebal;
document.getElementById('result').innerHTML=sum;


animate({
duration: 1000,
timing: function(timeFraction) {
return Math.pow(timeFraction, 2);
},
draw: function(progress) {
brick.style.left = progress * sum + '%';


}
});
};
}
</script>

laimas 27.12.2015 11:41

Цитата:

Сообщение от serebann
Подскажите, почему при вычитание (-) всё срабатывает правильно
А при сложении (+) просто прибавляется ещё одно число к существующему.

Потому, что значение поля, это строка, а + в JS не только складывает, но и является операцией конкатенации строк.

Либо var bits = parseInt(document.getElementById("bits").value);, либо var bits = +document.getElementById("bits").value;

serebann 27.12.2015 11:55

Попробовал оба варианта и история та же.
Если я правильно понял нужно было заменить вот эту строчку
var bits = document.getElementById("bits").value;

на один из этих вариантов.
Либо var bits = parseInt(document.getElementById("bits").value);, либо var bits = +document.getElementById("bits").value;
Помогите пож.

serebann 27.12.2015 12:06

Теперь всё работает правильно, преобразовал в числа.
<script>

window.onload = function(){


document.getElementById('button').onclick = function() {
var balanc = "20";
var gamebalanc = "3819430";
var balanc = Number(balanc);
var gamebalanc = Number(gamebalanc);

var bits = document.getElementById("bits").value;
var stav = document.getElementById("stav").value;
var bits = Number(document.getElementById("bits").value);
var stav = Number(document.getElementById("stav").value);

function randomInteger(min, max) {
var rand = min + Math.random() * (max - min);
rand = Math.round(rand);
return rand;
}
var sum = ( randomInteger(0, 100) )

if (balanc > bits) {
if (stav < sum) {
var resbits = bits * 2;
var newuserbal = balanc + resbits;
var newgamebal = gamebalanc - resbits;
}
if (stav > sum) {
var newuserbal = balanc - bits;
var newgamebal = gamebalanc + bits;
}
}


document.getElementById('userbal').innerHTML=newuserbal;
document.getElementById('gamebal').innerHTML=newgamebal;
document.getElementById('result').innerHTML=sum;


animate({
duration: 1000,
timing: function(timeFraction) {
return Math.pow(timeFraction, 2);
},
draw: function(progress) {
brick.style.left = progress * sum + '%';


}
});
};
}
</script>

laimas 27.12.2015 12:10

var  a = '1', b = '2'; //строки
alert(a + b) //конкатенация строк
a = parseInt(a);
alert(a + b) //все равно конкатенация, так как b все еще строка
b = parseInt(b);
alert(a + b) //сложение, ибо числа

serebann 27.12.2015 12:18

Цитата:

Сообщение от laimas (Сообщение 401581)
var  a = '1', b = '2'; //строки
alert(a + b) //конкатенация строк
a = parseInt(a);
alert(a + b) //все равно конкатенация, так как b все еще строка
b = parseInt(b);
alert(a + b) //сложение, ибо числа

Помогите решить одну оставшуюся задачу.
Изначально Переменные:
balance и gamebalance имеют значения 20 и 3819430
И при каждом нажатии на кнопку старт скрипт отталкивается от этих значений, а мне нужно чтоб он отталкивался от новых значений которые собственно меняются в строках Game Balance и Your Balance на странице
http://payforyou.top/limit.php

laimas 27.12.2015 12:56

Ну так перезаписывайте balance и gamebalance новыми значениями.

serebann 27.12.2015 13:02

Цитата:

Сообщение от laimas (Сообщение 401583)
Ну так перезаписывайте balance и gamebalance новыми значениями.

Как? В каком месте это сделать?
Просто покажите пож.
<script>

window.onload = function(){


document.getElementById('button').onclick = function() {

var balanc = "20";
var gamebalanc = "3819430";
var balanc = Number(balanc);
var gamebalanc = Number(gamebalanc);

var bits = document.getElementById("bits").value;
var stav = document.getElementById("stav").value;
var bits = Number(document.getElementById("bits").value);
var stav = Number(document.getElementById("stav").value);

function randomInteger(min, max) {
var rand = min + Math.random() * (max - min);
rand = Math.round(rand);
return rand;
}
var sum = ( randomInteger(0, 100) );
var sum = Number(sum);

if (balanc > bits) {
if (stav > sum) {
var resbits = bits * 2;
var newuserbal = balanc + resbits;
var newgamebal = gamebalanc - resbits;
document.getElementById('userbal').innerHTML=newuserbal;
document.getElementById('gamebal').innerHTML=newgamebal;
document.getElementById('msg').innerHTML=' ';
}

if (stav < sum) {
var newuserbal = balanc - bits;
var newgamebal = gamebalanc + bits;
document.getElementById('userbal').innerHTML=newuserbal;
document.getElementById('gamebal').innerHTML=newgamebal;
document.getElementById('msg').innerHTML=' ';
}

}
else document.getElementById('msg').innerHTML='Insufficient Funds';



document.getElementById('result').innerHTML=sum;

animate({
duration: 1000,
timing: function(timeFraction) {
return Math.pow(timeFraction, 2);
},
draw: function(progress) {
brick.style.left = progress * sum + '%';


}
});
};
}
</script>

laimas 27.12.2015 13:13

var balanc = 20;
var gamebalanc = 3819430;
var balanc = Number(balanc);
var gamebalanc = Number(gamebalanc);
var bits = document.getElementById("bits").value;
var stav = document.getElementById("stav").value;

var bits = +document.getElementById("bits").value;
var stav = +document.getElementById("stav").value;

var newuserbal = balanc + resbits;
var newgamebal = gamebalanc - resbits;


balanc += resbits;
gamebalanc -= resbits;

и оперировать balanc и gamebalanc.

serebann 27.12.2015 13:23

Цитата:

Сообщение от laimas (Сообщение 401585)
var balanc = 20;
var gamebalanc = 3819430;
var balanc = Number(balanc);
var gamebalanc = Number(gamebalanc);
var bits = document.getElementById("bits").value;
var stav = document.getElementById("stav").value;

var bits = +document.getElementById("bits").value;
var stav = +document.getElementById("stav").value;

var newuserbal = balanc + resbits;
var newgamebal = gamebalanc - resbits;


balanc += resbits;
gamebalanc -= resbits;

и оперировать balanc и gamebalanc.

Так не работает у меня


Часовой пояс GMT +3, время: 18:02.