double 타입 사용시 주의할 점

오늘 삽질했던 코드. 평소에는 double을 잘 안 쓰다보니 헷갈렸다.

문제가 되었던 코드.

for (auto iter = range.first; iter != range.second; iter++)
{
    int reward_id = (*iter).second.reward_id;
    int funcsrl = (*iter).second.funcsrl;
    int reward_type = (*iter).second.reward_type;
    std::string reward_itemcode = (*iter).second.itemcode;
    double rate = (*iter).second.rate / 100;	// DB에는 만분률로 되어있으므로 백분율로 환산해야함.

    lottery_info.Add(std::make_tuple(reward_id, funcsrl, reward_type, reward_itemcode), rate);

#ifdef _DEBUG
    ServerStateLog(g_DebugTracerServer, "RewardID:[%d] FuncSRL:[%d] Rate:[%f]", reward_id, funcsrl, rate);
#endif
}

확률 계산처리를 해야하는데 DB에는 데이터가 만분율 기준(ex : 9.5% = 950)으로 들어가 있고 확률 계산처리 함수에는 백분율로 넣어줘야했다. 그래서 데이터를 가져오면서 나누기 100을 했던 것인데…

이터레이터 안의 (*iter).second.rate 값은 int 값. 950을 100으로 나누어 그 결과인 9.5를 double 형으로 얻으려는 것이었다.

확률 계산에서 문제가 계속 일어나 찾아보니 저 값이 9.5가 아닌 9.0이 들어가고 있었다.

int 와 int 를 나누어서 double 에 넣는다고 소수점 처리가 되지 않는다는 것을 깜빡했다. / 100 을 / 100.0f 로 수정하는 것으로 쉽게 해결.

 

One Reply to “double 타입 사용시 주의할 점”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.