정수 실수 변환 - jeongsu silsu byeonhwan

어느 프로그래밍 언어를 막론하고 문자형 데이터를 정수형 또는 실수형으로 변환해야하는 일은 빈번하게 찾아옵니다.

"13.1" => 13.1

예를 들어, XML 문서에서 데이터를 파싱했거나, 크롤링을 했거나 등등의 상황에서는 숫자이지만 문자형으로 오곤 합니다. 

자바스크립트에서 문자형 데이터를 정수형 또는 실수형으로 변환할 때는 parseInt() 함수와 parseFloat() 함수를 각각 사용할 수 있습니다. 엄밀히 따지면 parse라는 이름에서 유추해볼 수 있듯이 변환이라기 보다는 정수와 실수를 찾아준다고 보는 것이 좀 더 정확할 것 같네요. 

먼저 parseInt() 함수의 사용법부터 살펴보겠습니다. parseInt() 함수에 문자형 데이터를 파라미터로 전달해주면 정수형으로 변환해줍니다. 

정수 실수 변환 - jeongsu silsu byeonhwan
parseInt() 사용법

만약 실수를 담고 있던 데이터를 전달해주면 소수점 아래는 날려버리고 정수만 남겨줍니다. 

정수 실수 변환 - jeongsu silsu byeonhwan

그리고 문자형 데이터 내에 숫자 말고 다른 것을 같이 갖고 있을 때는 숫자만 빼옵니다. 

정수 실수 변환 - jeongsu silsu byeonhwan

parseFloat()

이번에는 실수형 데이터로 변환해주는 parseFloat() 함수를 사용해보겠습니다. 

정수 실수 변환 - jeongsu silsu byeonhwan
parseFloat() 사용법

실수형으로 잘 변환되었습니다. 그런데 만약에 소숫점 둘째자리에서 반올림한 결과를 보고 싶다면 어떻게 해줘야 할까요? toFixed() 메소드를 활용하면 됩니다. 파라미터로 1을 전달해주면 소숫점 첫째자리까지만 보여줍니다. 단, 주의해야할 것은 자료형이 문자열로 바뀌었다는 점입니다.

정수 실수 변환 - jeongsu silsu byeonhwan

저는 위와 같이 parseFloat()와 toFixed()를 세트로 사용해야 할 일들이 많았습니다.^^ 

관련 글

☞ [javascript] 숫자를 문자열로 바꿔주는 String 함수와 toString 메서드


지금까지 정수, 실수, 문자 자료형끼리만 연산을 해보았습니다. 하지만 실제로 프로그래밍을 할 때는 서로 다른 자료형으로 연산을 할 때가 많습니다.

이번 유닛에서는 서로 다른 자료형끼리 연산을 하면 어떤 현상이 발생하는지 알아보겠습니다.

16.1 자료형의 확장 알아보기

먼저 정수와 실수를 함께 연산했을 때의 자료형의 확장을 알아보겠습니다. 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

type_promotion_int_to_float.c

#include <stdio.h>
 
int main()
{
    int num1 = 11;
    float num2 = 4.4f;
 
    printf("%f\n", num1 + num2);    // 15.400000: 정수와 실수 덧셈. 정수는 실수로 변환됨
    printf("%f\n", num1 - num2);    // 6.600000: 정수와 실수 뺄셈. 정수는 실수로 변환됨
    printf("%f\n", num1 * num2);    // 48.400002: 정수와 실수 곱셈. 정수는 실수로 변환됨
    printf("%f\n", num1 / num2);    // 2.500000: 정수와 실수 나눗셈. 정수는 실수로 변환됨
 
    return 0;
}

실행 결과

15.400000
6.600000
48.400002
2.500000

정수와 실수를 함께 연산하면 결괏값은 실수로 나옵니다. 왜냐하면 실수가 정수보다 표현 범위가 넓기 때문입니다.

그림 16‑1 표현 범위가 넓은 쪽으로 자동 변환
정수 실수 변환 - jeongsu silsu byeonhwan

C 언어에서는 자료형을 섞어서 쓰면 컴파일러에서 암시적 형 변환(implicit type conversion)을 하게 되는데 자료형의 크기가 큰 쪽, 표현 범위가 넓은 쪽으로 자동 변환됩니다. 이를 형 확장(type promotion)이라고 하며 값이 버려지지 않고 그대로 보전됩니다.

이번에는 크기가 다른 정수끼리 연산을 해보겠습니다.

type_promotion_int_to_long_long.c

#include <stdio.h>
 
int main()
{
    long long num1 = 123456789000;
    int num2 = 10;
 
    // int보다 long long이 자료형 크기가 크므로 long long으로 변환됨
    printf("%lld\n", num1 + num2);    // 123456789010
    printf("%lld\n", num1 - num2);    // 
    printf("%lld\n", num1 * num2);    // 1234567890000
    printf("%lld\n", num1 / num2);    // 12345678900
 
    return 0;
}

실행 결과

123456789010

1234567890000
12345678900

long longnum1intnum2를 함께 연산하면 long long으로 변환됩니다. int는 4바이트, long long은 8바이트이므로 int보다 long long이 크기 때문이죠.