Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не прибавляет а подставляет! (типы переменных) (https://javascript.ru/forum/misc/56144-ne-pribavlyaet-podstavlyaet-tipy-peremennykh.html)

Makk 01.06.2015 14:07

Не прибавляет а подставляет! (типы переменных)
 
Не силен в JS наверняка всё очевидно, но сам разобраться не могу (

Вот такой код:

<p>В поле &quot;сумма платежа&quot;
  следует указать сумму с учетом комиссии в 2%. Для удобства воспользуйтесь нашим калькулятором:</p>
<p>
  <label for="number">Сумма</label>
  <input type="number" name="summa" id="summa" onChange="Rech() "> 
  + 2% = <input type="number" name="rezul" id="rezul">
</p>

<script>
function Rech()
{
var sum = document.getElementById("summa").value, rez;
var rez = sum + (sum / 100 * 2) 
document.getElementById("rezul").value = rez;
}
</script>


Вместо результата получения процента и прибавления его к исходному числу, получаю подстановку, то есть (200 / 100 * 2) + 200 = не 204 а 2004.

Что не так?

рони 01.06.2015 14:22

var sum = +document.getElementById("summa").value

Makk 01.06.2015 14:24

Плюсик в карму вам за этот плюсик)

demoniqus 02.06.2015 09:42

Если почитаешь про приведение типов, то найдешь там, что при одновременной обработке строкового и числового типа приоритет будет отдан строковому по возможности. Т.к. в JS операция + означает, как математическое сложение, так и конкатенацию строк, а значения input'ов всегда строковые, то ты имеешь конкатенацию строковой sum c числом в скобке (операции деления и умножения не могут быть применены к строке, поэтому в скобке sum преобразуется к числовому типу).

рони 02.06.2015 10:10

demoniqus,
:victory:


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