2013-10-30 5 views
0

예상대로 작동하지 않습니다 다음자바 스크립트 입력 값 문제

값이 포착되는 문제가 있습니다
function sum(x,y){ 
    return x + y; 
} 

document.getElementById('submit').onclick = function(e) 
{ 

    //do someting 
    e.stopPropagation(); 

    var value1 = document.getElementById('v1').value, 
    value2 = document.getElementById('v2').value; 

    var newSum = sum(value1, value2); 
    console.log(newSum); 

} 

. 먼저 숫자로 값을 변환해야

return x + y; 

return parseInt(x) + parseInt(y); 

에 그것은 추가하기 전에, 합이 아니라 "1 + 2 = 12"

+0

@ Jahnux73 데이터 무결성을 유지하려면'parseInt() '를 사용하는 것이 좋습니다. – BenM

+0

'1 + 2'는 '3'과 같을 수 있지만 '1'+ '2' '는'12 '와 같습니다. – David

답변

6

변경을 반환해야합니다. 숫자가 부동 소수 인 경우 parseInt 대신 parseFloat을 사용할 수 있습니다.

편집 의견에서 RGraham이 제안한대로 기수 (명시적인 parseInt의 의사)를 전달하는 것이 좋습니다. 그래서 코드는 더 정확성을 위해

return parseInt(x, 10) + parseInt(y, 10); 
+0

[radix를 지정하는 것을 잊지 마세요] (http://stackoverflow.com/questions/850341/how-do-i-workaround-javascripts-parseint-octal-behavior)! 'parseInt (x, 10);' – CodingIntrigue

+1

@RGraham 언급에서 : – thefourtheye

2

된다 :

function sum(x,y){  
    return parseFloat(x) + parseFloat(y); 
    } 
1

사용

parseInt

구문

var에 NUM =에서는 parseInt (문자열, 기수는);

매개 변수

문자열 구문 분석하는 값입니다. 문자열이 문자열이 아니면 문자열로 변환됩니다. 문자열의 선행 공백은 무시됩니다.

radix 위에서 언급 한 문자열의 기수를 나타내는 정수입니다. 판독기 혼동을 제거하고 예측 가능한 동작을 보장하려면 항상이 매개 변수를 지정하십시오. 기수를 지정하지 않으면 구현마다 다른 결과가 생성됩니다.

2

모든 값이 자바 스크립트에서 문자열로 전달되기 때문에 값을 int로 구문 분석해야합니다.

value1 = parseInt(document.getElementById('v1').value, 10); 
value2 = parseInt(document.getElementById('v2').value, 10);