LHJ

I'm a FE developer.

3-5. 연산자(Operator) / 산술 연산자(-, *, /, % 연산자)

17 Nov 2020 » js_beginner

21. 산술 연산자(-, *, /, % 연산자)

- 연산자

  • 왼쪽 표현식 평가 결과에서 오른쪽 표현식 평가 결과를 뺍니다.
  • String 타입이지만, 값이 숫자면 Number 타입으로 변환하여 계산
console.log("135" - 2); // 133
  1. “135”가 String 타입이지만 값이 숫자이므로
  2. 값을 Number 타입으로 변환하여 계산

* 연산자

  • 왼쪽 표현식 평가 결과와 오른쪽 표현식 평가 결과를 곱합니다.
  • 숫자 값으로 변환할 수 있으면 변환하여 곱합니다.
  • NaN 반환

    • 양쪽의 평가 결과가 하나라도 숫자가 아닐 때

        console.log(10 * "20"); // 200
        console.log(10 * true); // 10
        console.log(10 * false); // 0
        console.log(10 * null); // 0
        console.log(10 * "A"); // NaN
      
      1. 문자 타입이라도 값이 숫자이면 숫자 타입으로 변환합니다.
      2. true를 1로 변환
      3. false, null을 0으로 변환

  • 소수 값이 생기는 경우 처리
// IEEE 754 유동 소수점
console.log(2.3 * 3); // 6.8999999999999995
console.log(2.3 * 10 * 3 / 10); // 6.9
  1. 6.9로 출력되지 않습니다.
  2. 정상이며, IEEE 754 유동 소수점 처리 때문
  3. 대응 방법

    • 실수를 정수로 변환하여 값을 구하고
    • 다시 정수를 실수로 변환합니다.

/ 연산자

  • 왼쪽 표현식 평가 결과를 오른쪽 표현식 평가 결과로 나눕니다.
  • NaN 반환

    • 양쪽의 평가 결과가 하나라도 숫자가 아닐 때
    • 분모, 분자 모두 0일 때

  • 분모, 분자가 0일 때

    • 분모가 0이면 Infinity 반환
    • 분자가 0이면 0 반환
console.log(10 / "20"); // 0.5
console.log(10 / true); // 10
console.log(10 / false); // Infinity
console.log(10 / null); // Infinity
console.log(10 / "A"); // NaN

% 연산자

  • 왼쪽 표현식 평가 결과를 오른쪽 표현식 평가 결과로 나누어 나머지를 구합니다.
  • 3 % 2의 나머지는 1
console.log(5 % 2.5); // 0
console.log(5 % 2.3); // 0.40000000000000036
console.log((5 * 10 - (2 * 2.3 * 10)) / 10); // 0.4
  1. 5를 2.5로 나누면 나머지가 0
  2. 소수 끝에 36이 있는 것은 IEEE 754의 유동 소수점 처리 때문
  3. 실수를 정수로 변환하여 연산하고 다시 정수를 실수로 변환