20. String <-> Number 변환

장운서·2021년 6월 19일
0

replit - javascript

목록 보기
20/20
post-thumbnail

20. String <-> Number 변환

20-1. String <-> Number 변환

자바스크립트 언어의 특징 중 하나가 데이터 타입을 신경쓰지 않는다는 것입니다.

이 점은 양날의 검이라고 할 수 있겠습니다.

타입 체크가 쉽다는 건 다른 언어보다 편하다고 할 수 있겠지만, 코드를 잘못 짜면 자칫 오류가 날 수 있습니다.

이게 무슨 소리인지? 🤨

다음 코드를 보면 오류없이 모두 정상으로 나옵니다.

let a = 10; // Number
a = "나는 String인데.."; // String

console.log(a);

프로그래밍 언어가 JavaScript가 처음이라면 이상하지 않을 수 있습니다.

하지만 Java나 C언어 등에서.. 저 위의 코드는 오류입니다.

다른 언어에서는 변수에 어떤 값을 할당해서 변수의 type이 확정되면,

그 후에 다른 type의 값을 할당할 수가 없습니다.

딱히 오류가 날 상황이 있을지 모르겠는데, 어느 때 헷갈릴까?

let a = '5'; // String
a = 5; // Number

console.log(a);

'5'는 홑따옴표로 감싸져 있으므로 String형 입니다.

두 번째 줄에서 숫자 5를 할당 했기 때문에 변수 a 는 Number형이 되었습니다.

혹시 헷갈린다면 typeof 라는 연산자로 해당 변수가 무슨 type인지 알 수 있습니다.

let a = '900';  
let b = 350; 
let c = Math.random(); 
let d = '5' + 5; 

console.log(typeof a);
console.log(typeof b);
console.log(typeof c);;
console.log(typeof a);

프로그램을 잘못 짜면 날 수 있는 상황을 더 볼까요?

console.log('200'+'10');
console.log('200'-'10');
console.log(200+'11');
console.log('200'+11);
console.log('200'-'안녕');

어떤 결과가 출력 되나요?

예상한 결과가 출력 됐나요?

참고로 NaN 은 Not a number 라는 뜻입니다.

더하기나 빼기가 써있어서 컴퓨터가 숫자인줄 알고 계산하려고 했더니

도대체 계산이 불가능하고 이상한 답이 나왔다는 뜻입니다.

앞 시간에 배웠던 "+"의 특징을 한 번 보겠습니다.

alert("김예리" + "님 안녕하세요."); 
let place = "위코드";
alert(place + "에 오신 것을 환영합니다"); 

숫자끼리의 더하기는 물론이고,

String끼리 문자를 연결할 수가 있었습니다.

console.log("200"-"안녕");

하지만 -의 경우, 오로지 숫자에만 사용 되는 연산이죠.

"안녕하세요" - "안녕" = ??

String의 경우,

왠지 같은 "안녕"을 빼니까 "하세요"만 남으면 좋겠지만(저의 바람입니다)

전 세계 공통적으로 약속된 연산이 아니기 때문에 존재하지 않는 연산입니다.

그렇기 때문에 NaN 이라는 결과가 반환됩니다.

14세 미만의 사람이 가입했는지 확인하려면 아래의 코드가 필요합니다.

let birthYear = "2000";
let currentYear = 2019;
if (currentYear - birthYear < 14) {
  alert("가입할 수 없습니다.");
}

하나는 String, 하나는 Number의 수학계산인데,

이번에는 오류가 없는 코드입니다...

각각 어떤 결과가 나왔는지 꼭 확인해주세요!

console.log(2019+"2000");
console.log(2019-"2000");

컴퓨터가 + 의 양쪽을 보고, 하나라도 String이 있으면

문자열로서 합쳐줍니다.

그런데 - 라면, String의 마이너스는 존재 하지 않으므로

양쪽의 값을 모두 숫자로 변환해서 계산해 줍니다.

물론 위의 코드가 잘 동작 되긴 하지만,

함께 코드를 보는 동료가 충분히 오해할 수 있는 코드입니다.

계산이 잘 되더라도 텍스트로 표현된 숫자는,

꼭 숫자로 바꿔서 계산을 해주셔야 합니다.

다음과 같이 Number 함수를 사용해서 String형에서 Number형으로 전환할 수 있습니다.

var birthYearInput = "2000";
console.log(typeof birthYearInput);

var numberBirthYear = Number(birthYearInput);
console.log(typeof numberBirthYear);

Number함수 말고 parseInt, parseFloat 등이 있습니다.

parseInt("1.901");
parseFloat("1.901");
Number("1.901");
parseInt("200") + 1;

Number형에서 String형으로 변환하고 싶을 수도 있습니다.

어떻게 할까요?

var numberAsNumber = 1234; 
var numberAsString = numberAsNumber.toString();

console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);

+ 연산의 특성을 활용하여 아래와 같이도 변환할 수 있습니다.

var numberAsNumber = 1234; 
var numberAsString = 1234 + "";

console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);

연산의 특성을 활용해서 String 형을 Number형으로 변환할 수도 있습니다.

var numberAsNumber = "1234"; 
var numberAsString = numberAsNumber - 0;

console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);

위의 예제 모두 하나하나 작성하신 것 맞나요???

하지 않으셨다면, 이해할 수가 없답니다!!!!!!!!!!!!!!

 

Assignment

nationalPensionRemainingYearCount 함수를 구현해주세요.

  • 우리나라는 국민연금을 만 65세 부터 받을 수 있습니다.

  • nationalPensionRemainingYearCountage_string 이라는 input을 받습니다.

  • age_string 은 나이 값인데 string형 값으로 되어 있습니다.

  • 주어진 나이부터 몇년이 지나야 국민연금을 받을수 있는지 리턴 해주세요.

  • 리턴 값은 다음과 같습니다.

    "앞으로 20년 남으셨습니다"
  • 예를 들어, age_string 값이 다음과 같다면:

    "35"

    리턴 값은 다음과 같아야 합니다.

    "앞으로 30년 남으셨습니다"

// 강의와 관련된 코드를 직접 작성하고 콘솔에서 확인해주세요!!
let a = '900';  
let b = 350; 
let c = Math.random(); 
let d = '5' + 5; 
 
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);;
console.log(typeof a);


// Assignment - 다음 함수 안에 코드를 구현하세요
function nationalPensionRemainingYearCount(age_string) {
  // Your code here
  let age = Number(age_string) //문자형 값을 숫자형으로 바꿔줌
  let year = 65 - age //정년 - 나이
  return "앞으로 " + year + "년 남으셨습니다" //출력
}

// 아래의 코드는 절대로 수정하거나 삭제하지 마세요.
module.exports =  {nationalPensionRemainingYearCount};

profile
방향성을 찾고싶은 프론트엔드개발자

0개의 댓글