2014-11-29 2 views
0

Я пытаюсь добавить 2 значения (полужирный), которые вводятся пользователем, но вместо того, чтобы добавлять их затем математически (100 + 1 = 101), он добавляет их как это (100 + 1 = 1001) ,Добавление значений в javascript

$('#inputcost').keyup(function(){  
var price = $(this).val();  
}); 


function checkboxcost() { 
var sum = 0; 
var gn, elem; 
for (i=0; i<2; i++) { 
gn = 'extra'+i; 
elem = document.getElementById(gn); 
if (elem.checked == true) { sum += Number(elem.value); } 
} 


**var total = (price.value + sum.toFixed(2)); 
document.getElementById('totalcost').value = "$" + total;** 



} 


</script> 


<input id="totalcost" disabled/> 
+1

Вы должны использовать ParseInt(); – Rafael

+0

использование parseInt(). –

+0

@ Rafael var total = parseInt (price.value + sum.toFixed (2)); document.getElementById ('totalcost'). Value = "$" + total; Как это? Все его выполнение умножает цену var на 10. – Dylan12

ответ

1

Проблема в том, как вы подозреваете, в этой строке:

var total = (price.value + sum.toFixed(2)); 

Проблема в том, что .toFixed преобразует число к строка для отображения. Поэтому вы пытаетесь добавить строку к числу, что приводит к конкатенации, а не к добавлению.

Вы хотите добавить цифры вместе, а затем отобразить сумму:

var total = (price.value + sum).toFixed(2); 

С учетом сказанного, я не уверен, где price.value исходит из, так что возможно, что это строка тоже. В этом случае, преобразовать его с unary plus + operator:

var total = (+price.value + sum).toFixed(2); 
+0

Третий, спасибо, огромное спасибо! – Dylan12

+0

Таким образом, флажки обновляют автоматически, но для ввода я должен установить флажок для его обновления. Как я могу получить его, чтобы входные данные обновляли общее количество, когда оно было изменено самостоятельно? – Dylan12

+0

@ Dylan12 Возможно, вам нужен либо прослушиватель событий «change», либо «keyup». – lonesomeday

0

его лечение price.value, как строки, так преобразовать эту строку в число, например:

var total = (Number(price.value) + sum.toFixed(2)); 
+0

Его все еще просто добавьте вместе, как 100 + 1 = 1001 – Dylan12

+0

Как насчет того, если вы суммируете цену.значения + сумму, а затем задаете две цифры после десятичного значения, например, '(Number (price.value) + sum) .toFixed (2) '? – SMA

+0

Таким образом, флажки обновляют автоматически, но для ввода я должен установить флажок для его обновления. Как я могу получить его, чтобы входные данные обновляли общее количество, когда оно было изменено самостоятельно? – Dylan12

0

Это потому, что типы операндов являются строками и + оператора для двух строк делают конкатенации, а не дополнение ,

Если преобразовать их в число, то вы получите результат номера:

"1" + "2" == "12" 

parseFloat("1") + parseFloat("2") == 3 
+0

Хорошо, так в чем разница между parseInt() и parseFloat()? – Dylan12

+0

'parseFloat (" 1.1 ") == 1.1' while' parseInt ("1.1") == 1' – poida

0

, кажется, строка добавление происходит. Так что попробуйте преобразовать строку чисел в целое, используя ParseInt(), как:

var x = parseInt("1") 
var y = parseInt("2") 
var z = x + y 
0

Попробуйте parseInt(price.value) + ...

Смежные вопросы