스파르타 (React_6기) 사전캠프

2024. 06. 04.(parseInt와 Math. floor의 차이점)

cha123hein 2024. 6. 5. 01:47

[오늘 새로 안 부분]

함수의 기본형태 : function(매개변수){return값}

상수 : 항상 같은 수

변수 : 변할 수 있는 수

상수로 지정할때는 const, 변수로 지정할때는 let

익명함수 : const함수 = function(매개변수){return 리턴값}

화살표함수 : const함수=(매개변수) => {return 리턴값}

 

[오늘의 공부]

  • 코드가타 3,4번 문제 풀이
  • 웹개발 종합반 특강 2주차 듣기(javascript 활용문법)

 

[추가공부]

코드가타문제 3. 몫구하기

정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.

(0<num1<=100, 0<num2<=100)

 

위 문제 풀이를 검색해보니, parseInt()함수를 사용하여 구할 수 있었는데,

parseInt를 이용한 문제 풀이

풀이 댓글 중에 

'큰 수에서는 type number에 string이 들어가는 경우도 있기 때문에, 소수점 이하를 절삭하여 정수 값을 return하려는 목적으로 Math.floor 대신에 parseInt를 사용해서는 안 됩니다.'

라는 글이 있어 paseInt와 Math. floor 함수의 차이점에 대해 의문을 가지게 되었다. 

Math.floor를 이용한 문제 풀이

그렇다면 둘의 차이점이 무엇일까?

 

parseInt()함수의 정의는 '문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환합니다.'

=> 문자열을 숫자로, 실수를 정수로 변환해준다. 

 

Math.floor()함수의 정의는 '함수는 주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환합니다.'

=> 주어진 수 이하의 가장 큰 정수로 변환해준다.

 

위의 댓글에 대한 예시사항을 parselnt함수 사용 주의사항에서 볼 수 있었는데,

일부 숫자는 6.022e23(6.022 × 10^23)처럼 문자열 표현에 e 문자를 사용하기 때문에, parseInt를 매우 크거나매우 작은 숫자의 소수점 이하 값을 자르기 위해 사용하면 예기치 못한 결과가 발생할 수 있습니다. parseInt를 Math.floor()의 대체품으로 사용해서는 안됩니다.

 

추가적으로 알아보니 parseInt는 (숫자+문자)의 경우 앞의 숫자만 받아들이기 때문에 결과값으로 다른 결과가 나올 수 있다는 것 같다.

 

두 함수의 차이점에는 음수에서도 나타났는데,

parseInt는 양의 부호 +와 음의 부호 -를 인식합니다. 부호 인식은 선후행 공백을 제거한 후 첫 번째 단계로서 수행되며, 부호를 찾을 수 없으면 알고리즘은 다음 단계로 넘어갑니다. 부호를 찾은 경우 부호를 제거하고, 나머지 문자열에 대해 숫자 파싱을 진행합니다.

 

즉, -12.45를 변환시키면 parselnt에서는 -12, Math.floor에서는 -13이라는 다른 결과 값이 나온다.

 

parseInt()는 소수점 아래를 버리고 순수히 정수부분만을 취할때 사용하고,
Math.floor()는 값 자체를 내림하는 것이기 때문에 숫자를 내림해야할때 사용한다고 볼 수 있다.

 

문제에서는 0~100사이의 정수라는 제한을 두었기 때문에 둘 다 사용해도 오류가 나지 않은 것으로 보인다.

'스파르타 (React_6기) 사전캠프' 카테고리의 다른 글

2024. 6. 12. (reduce)  (0) 2024.06.12
2024. 06. 10. (for문)  (0) 2024.06.10
2024. 06. 07.(filter함수)  (0) 2024.06.07
2024. 06. 05.(if문, 삼항연산자)  (0) 2024.06.05
스타터 노트 작성  (0) 2024.06.02