2015-03-09 2 views
0

Это работает для моей функции умножения, но когда я пытаюсь выполнить ее с помощью простого + =, он создает значения массива в последовательности или их добавлении?Проблема с суммой функций с массивом Javascript

//sum() 
 
function sum() { 
 
    var val1 = document.getElementById('sumMulti').value; 
 
    var array = val1.split(','); 
 
    
 
    var arraySum = 0; 
 
    for (var i = 0; i < array.length; i++) { 
 
     arraySum += array[i]; 
 
     
 
    } 
 
    document.getElementById('displayLabel').innerHTML = "The sum of your numbers is: " + arraySum.toString() + "."; 
 
}
<div class="col-md-4"> 
 
    <label class="control-label">Enter Numbers Seperated by ",":</label> 
 
    <br /> 
 
    <input type="text" id="sumMulti" class=" form-control" />    
 
    <button type="submit" onclick="sum()" class="btn btn-primary pull-right" style="margin:20px 60px 10px 0px;">Sum()</button> 
 
    
 
    <div id="displayLabel" class="control-label"></div> 
 
    
 
</div>

ответ

0

Вы должны научиться любить функцию parseInt.

Радиус по умолчанию - 10, но вы можете указать и другие базы (например, иногда это удобно для синтаксического анализа шестнадцатеричных чисел с parseInt(hexString, 16)).

Если вы ожидаете действительные цифры, вы можете предпочесть вместо этого parseFloat. Он принимает те же параметры.

Что касается того, почему это сработало для умножения, Javascript известен тем, что делает преобразования типов за вашей спиной. Строки имеют оператор + (конкатенация), поэтому, когда вы получаете значение ввода (которое является строкой перед разбором), оно будет выполнять конкатенацию. Однако в строках нет есть оператор *. За вашей спиной среда выполнения Javascript пытается проанализировать строки как десятичные числа, а затем умножить. Это не поведение, на которое я бы рассчитывал, поэтому я бы предпочел явно разобрать все входы сначала, а затем выполнить арифметические операции над ними.

//sum() 
 
function sum() { 
 
    var val1 = document.getElementById('sumMulti').value; 
 
    var array = val1.split(','); 
 
    
 
    var arraySum = 0; 
 
    for (var i = 0; i < array.length; i++) { 
 
     arraySum += parseInt(array[i], 10); 
 
     
 
    } 
 
    document.getElementById('displayLabel').innerHTML = "The sum of your numbers is: " + arraySum.toString() + "."; 
 
}
<div class="col-md-4"> 
 
    <label class="control-label">Enter Numbers Seperated by ",":</label> 
 
    <br /> 
 
    <input type="text" id="sumMulti" class=" form-control" />    
 
    <button type="submit" onclick="sum()" class="btn btn-primary pull-right" style="margin:20px 60px 10px 0px;">Sum()</button> 
 
    
 
    <div id="displayLabel" class="control-label"></div> 
 
    
 
</div>

+0

Спасибо, Остин! Можете ли вы объяснить, почему функция умножения работала без функции parseInt? – JReam

+0

Обновленный ответ с объяснением. –

+0

Отлично, спасибо! Я бы проголосовал за ваш ответ, но я новичок в SO, поэтому он не позволит мне :( – JReam

2

Вам нужно разобрать цифры в целых числах.

//sum() 
 
function sum() { 
 
    var val1 = document.getElementById('sumMulti').value; 
 
    var array = val1.split(','); 
 
    
 
    var arraySum = 0; 
 
    for (var i = 0; i < array.length; i++) { 
 
     arraySum += parseInt(array[i]); 
 
     
 
    } 
 
    document.getElementById('displayLabel').innerHTML = "The sum of your numbers is: " + arraySum.toString() + "."; 
 
}
<div class="col-md-4"> 
 
    <label class="control-label">Enter Numbers Seperated by ",":</label> 
 
    <br /> 
 
    <input type="text" id="sumMulti" class=" form-control" />    
 
    <button type="submit" onclick="sum()" class="btn btn-primary pull-right" style="margin:20px 60px 10px 0px;">Sum()</button> 
 
    
 
    <div id="displayLabel" class="control-label"></div> 
 
    
 
</div>

+1

'parseFloat' может работать лучше в случае, если есть не-целые числа во входных данных. –

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