상세 컨텐츠

본문 제목

Double to int cast

c++

by Riella 2020. 7. 18. 18:16

본문

728x90

처음에 n = 10이라 정의하고 m = 100이라 정의를 한 다음에

간단한 if문을 만들어서 pow(n, 2) (n의 제곱) 과 m이 같은 수인지 확인하였다.

하지만 알다시피 pow(a, b)의 타입은 double이다.

그래서 (int) pow(n, 2)를 해서 비교를 했더니 ...??? 99가 되는것이었다.

찾아보니 수가 0보다 크면 0.5를 더하고 0보다 작으면 0.5를 빼라고..

그래서 위에 ROUND_2_INT(f) 라는 함수를 정의 해줬다.

(물론 제일 쉬운 방법은 round() 함수를 쓰는것이다 ㅋㅋㅋ)

#include <iostream>
#include <string>
#include <cmath>
#include <typeinfo>

#define ROUND_2_INT(f) ((int) (f >= 0.0 ? (f+0.5):(f-0.5)))

//when using typecast, add 0.5 if the integer is greater than 0
//subtract 0.5 when the integer is less than 0
using namespace std;

int main()
{
    int n = 10;
    int m = 100;
    cout << pow(n, 2) << endl; //100
    cout << typeid(pow(n, 2)).name() << endl; //d=double
    cout << (int) pow(n, 2) << endl; //99
    cout << ROUND_2_INT(pow(n, 2)) << endl; //100
    if (ROUND_2_INT(pow(n, 2)) == m) {
        cout << "n square is 100\n";
    }
    else {
        cout << "n square is not equal to 100\n";
    }
    return 0;
}

관련글 더보기

댓글 영역