Как заставить JS делать математику вместо того, чтобы соединить две строки - PullRequest
95 голосов
/ 30 января 2011

Мне нужен javascript, чтобы добавить 5 к целочисленной переменной, но вместо этого он обрабатывает переменную как строку, поэтому записывает переменную, затем добавляет 5 в конец «строки».Как я могу заставить его делать математику вместо этого?

var dots = document.getElementById("txt").value; // 5
function increase(){
    dots = dots + 5;
}

Вывод: 55

Как я могу заставить его выводить 10?

Ответы [ 9 ]

104 голосов
/ 30 января 2011

У вас есть строка

dots = document.getElementById("txt").value;

в вашем файле, это установит точки в строку, потому что содержимое txt не ограничено числом.int меняет строку на:

dots = parseInt(document.getElementById("txt").value, 10);

Примечание: 10 здесь указывает десятичную (base-10).Без этого некоторые браузеры могут неправильно интерпретировать строку.См. MDN: parseInt.

49 голосов
/ 30 января 2011

самое простое:

dots = dots*1+5;

точки будут преобразованы в число.

18 голосов
/ 25 сентября 2013

НЕ ЗАБЫВАЙТЕ - Используйте parseFloat();, если вы имеете дело с десятичными знаками.

7 голосов
/ 17 марта 2017

Я добавляю этот ответ, потому что я не вижу его здесь.

Один из способов - поставить символ «+» перед значением

пример:

var x = +'11.5' + +'3.5'

x === 15

Я нашел, что это самый простой способ

В этом случае строка:

dots = document.getElementById("txt").value;

может быть изменено на

dots = +(document.getElementById("txt").value);

чтобы заставить его набрать номер

ПРИМЕЧАНИЕ:

+'' === 0
+[] === 0
+[5] === 5
+['5'] === 5
7 голосов
/ 20 декабря 2013

parseInt() должен сделать трюк

var number = "25";
var sum = parseInt(number, 10) + 10;
var pin = number + 10;

Дает вам

sum == 35
pin == "2510"

http://www.w3schools.com/jsref/jsref_parseint.asp

Примечание: 10 в parseInt(number, 10) указывает десятичное число (основание-10). Без этого некоторые браузеры могут неправильно интерпретировать строку. См. MDN: parseInt.

3 голосов
/ 28 мая 2016

Это также работает для вас:

dots -= -5;
1 голос
/ 05 января 2019

Вы можете добавить + после переменной, и она станет целым числом

var dots = 5
    function increase(){
        dots = +dots + 5;
    }
0 голосов
/ 05 ноября 2018

это действительно просто, просто

var total = (1 * yourFirstVariablehere) + (1 * yourSecondVariablehere)

это заставляет javascript умножаться, потому что нет никакой путаницы для * знака в javascript.

0 голосов
/ 30 марта 2016

ОБНОВЛЕНО, так как в последний раз это было отклонено ....

Я видел только часть

var dots = 5
function increase(){
    dots = dots+5;
}

раньше, но позже мне было показано, что поле txt передает переменную dots. Из-за этого вам нужно будет обязательно «очистить» ввод, чтобы убедиться, что он содержит только целые числа, а не вредоносный код.

Один простой способ сделать это - проанализировать текстовое поле с событием onkeyup(), чтобы убедиться, что оно содержит числовые символы:

<input size="40" id="txt" value="Write a character here!" onkeyup="GetChar (event);"/>

где событие выдаст ошибку и очистит последний символ, если значение не является числом:

<script type="text/javascript">
    function GetChar (event){
        var keyCode = ('which' in event) ? event.which : event.keyCode;
        var yourChar = String.fromCharCode();
        if (yourChar != "0" &&
            yourChar != "1" &&
            yourChar != "2" &&
            yourChar != "3" && 
            yourChar != "4" &&
            yourChar != "5" &&
            yourChar != "6" && 
            yourChar != "7" &&
            yourChar != "8" && 
            yourChar != "9")
        {
            alert ('The character was not a number');
            var source = event.target || event.srcElement;
            source.value = source.value.substring(0,source.value-2);
        }
    }
</script>

Очевидно, вы могли бы сделать это и с помощью регулярных выражений, но я выбрал ленивый выход.

С тех пор вы знаете, что в поле могут быть только цифры, вы можете просто использовать eval():

dots = eval(dots) + 5;
...