2016-12-10 1 views
-3

96보다 작은 수를 입력하면 0이 표시되고 96과 192 사이에 3이 나타나야하고 입력이 192보다 크거나 같으면 출력은 6. 이어야하지만 그렇지 않은 어떤 이유 코드는 입력 0 1 0 복귀 입력 2-99 복귀 6, 100-191 내지 0을 반환하고, 여기에 192 창 6정확한 판독 값을 제공하지 않는 것보다 큼

상기 코드

var number = document.getElementById("width").value; 
var text; 


if (number >= "192") { 
    text = "6"; 


} else if (number >= "96") { 
    text = "3"; 

} else { 
    text = "0"; 
} 
document.getElementById("smallquantity").innerHTML = text; 
이다
+1

사용자가'# width'에 입력 한 내용은 무엇입니까? 그것은 숫자일까요, 편지일까요? – BenM

+3

구체적인 문제를 명확히하거나 추가 세부 정보를 추가하여 필요한 것을 정확하게 강조하십시오. 현재 작성된 내용이므로 귀하가 원하는 내용을 정확하게 말하기는 어렵습니다. –

+1

문자열 비교 방법을 이해하고 있습니까? [이 질문] (http : // stackoverflow.com/questions/10863092/why-is-string-11-less-than-string-3). ''192 ''와''c "'문자열은 같은 것이 아닙니다. –

답변

0

문자열은 사전 적으로 비교할 때 문자의 순서에 따라 사전 식으로 비교됩니다. 숫자가 포함 된 두 개의 문자열을 비교하는 것은 두 개의 숫자를 비교하는 것과 같은 일을하지 않습니다.

"2" > "1294" 문자 2이 문자 1 뒤에 오기 때문에.

숫자를 사용하도록 논리를 변경하기 만하면됩니다. 우선, HTML 요소의 내용을 구문 분석하십시오.

var letter = parseInt(document.getElementById("width").value, 10); 

... 다음 숫자가 아닌 문자열을 사용하여 비교를 변경 :

10 아래의 사용 기준 10 수를 해석 할 때 ( "012" 같은 것이 8 진수로 해석되기 때문에, 중요한 진수되지 않음)을 의미
if (letter >= 192) 
0

시도해보기 문자열

var letter = document.getElementById("width").value; 
var text; 

// If the letter is "c" 
if (letter.localeCompare("c")) { 
    text = "6"; 

// If the letter is "e" 
} else if (letter.localeCompare("e")) { 
    text = "3"; 

// If the letter is anything else 
} else { 
    text = "0"; 
} 
document.getElementById("smallquantity").innerHTML = text; 
0

나는 당신이 if 논리를 잘못 시도했다고 생각합니다. 난 당신이 찾고있는 출력을 줄 것이라고 생각

if(letter < "96") 
    text = "0"; 
else if (letter < "192") 
    text = "3"; 
else 
    text = "6"; 

다음보십시오. 하지만 입력을 parseint하고 숫자 비교를 사용하여 if 블록에서 사용하는 것이 좋습니다.

var letter = parseInt(document.getElementById("width").value); 
if(letter < 96) 
    text = "0"; 
else if (letter < 192) 
    text = "3"; 
else 
    text = "6"; 
+0

나는 그의 모든 접근 방식이 잘못되었다고 생각합니다. 'letter < "192"는 많은 레벨에서 부정확하다. –

+0

일 수 있습니다. 그러나 우리는 그의 입력이 무엇인지 모르기 때문에 확신 할 수 없습니다. 그의 설명에서 내가 얻는 것은 그가 출력을 얻고 있지만, 블록의 잘못된 논리 설계로 인해 올바르지 않다. – reza

+0

그리고 그는 또한 * 사용자가 마지막 코멘트에 문자가 아닌 숫자를 입력 할 것이라고 말했다. – reza

0

ASCII 값과 비교하려면 먼저 convert it to ASCII이 필요합니다. 너는 바로 비교할 수 없다.
문자 "c"의 값은 192가 아니라 ASCII입니다.
먼저 ASCII로 변환 한 다음 정확한 값 (숫자가 아닌 숫자로 된 문자열)을 비교해야합니다.
로직이 잘못되었습니다 - IF는 "c"-> ELSE는 "c"또는 "e"입니다. ELSE에서는 그 "c"를 결코 얻지 못할 것입니다.

var letter = document.getElementById("width").value.charCodeAt(0); 
var text; 

// If the letter is "c" 
if (letter == 99) { 
    text = "6"; 

// If the letter "e" 
} else if (letter == 101) { 
    text = "3"; 

// If the letter is anything else 
} else { 
    text = "0"; 
} 
document.getElementById("smallquantity").innerHTML = text; 

이제 아이디어를 이해하게됩니다. 이에 따라 IF를 조정할 수 있습니다.

0

@ jacob 및 @reza의 도움을받은 후이 코드가 내 문제를 해결했습니다.이 코드를 이해하는 데 도움을 준 모든 사람들에게 감사드립니다.

var number = parseInt(document.getElementById("width").value, 10); 
    var text; 
    if (number < "96") { 
    text = parseFloat(0); 

    } else if (number < "192") { 
    text = parseFloat(3); 

    } else { 
    text = parseFloat(6); 
    } 
    document.getElementById("largequantity").innerHTML = parseFloat(text) * parseFloat(quantity); 
관련 문제