C++에서 double형을 int형으로 casting해서 사용할 때 소숫점이 절산된다
#include
#include
using namespace std;
int main(void) {
double dt = 15.25-14.74;
cout << floor(dt * 100.0) << endl;
cout << (int)(dt * 100.0) << endl;
cout << floor(dt * 100.0+0.5) << endl;
cout << (int)(dt * 100.0+0.5) << endl;
return 0;
}
실행결과
50
50
51
51
문제는 위의 2개의 결과인데, dt값이 0.51이기 때문에 *100하면 51이되어서 51이 출력될 줄 알았는데 50이 출력된다. int casting을 하지 않으면 51이 나온다.
모든수가 그런것은 아니고 몇몇수가 그렇다.
A)dt 값이 0.51이 아닌 0.509xx 등등이 될 수 있다.
부동소수점 표현법은 근사치로만 사용할 수 있기 때문. dt 값을 %f 로 출력해보면 0.50999999999999979 이 나온다.