xorms86   3년 전

단순히 29/50의 확률을 구하기 위해서 처음엔

a = (double)y / x * 100 로 하였지만 원하는 58의 값이 아닌 57이 할당되길래 연산자 우선순위 문제인가 생각되어 

z = (double)y *100 / x  로 바꾸니58이 할당되었습니다.

그런데 여전히 57이 나오는 이유를 모르겠어서 질문드립니다. 

jinhan814   3년 전

두 식 모두 y만 double로 형변환이 되는데 이걸 의도하신게 맞나요??

xorms86   3년 전

@jinhan814

x도 계산과정에서 자동 형변환 되지 않나요..? 옛날에 배웠던거 같긴한데 잘 기억이 안나네요

sujin   3년 전

double 타입의 정밀도 문제입니다.

29.0 / 50 * 100의 값은 57.99...이며, 정수형으로 변환 시 소수점 아래를 버린 57로 저장됩니다.

29.0 * 100 / 50의 값은 정확히 58이므로, 정수형으로 변환하더라도 58입니다.

xorms86   3년 전

@sujin 감사합니다! 57.99..일줄은 몰랐네요..

댓글을 작성하려면 로그인해야 합니다.