단순히 29/50의 확률을 구하기 위해서 처음엔
a = (double)y / x * 100 로 하였지만 원하는 58의 값이 아닌 57이 할당되길래 연산자 우선순위 문제인가 생각되어
z = (double)y *100 / x 로 바꾸니58이 할당되었습니다.
그런데 여전히 57이 나오는 이유를 모르겠어서 질문드립니다.
두 식 모두 y만 double로 형변환이 되는데 이걸 의도하신게 맞나요??
@jinhan814
x도 계산과정에서 자동 형변환 되지 않나요..? 옛날에 배웠던거 같긴한데 잘 기억이 안나네요
double 타입의 정밀도 문제입니다.
29.0 / 50 * 100의 값은 57.99...이며, 정수형으로 변환 시 소수점 아래를 버린 57로 저장됩니다.
29.0 * 100 / 50의 값은 정확히 58이므로, 정수형으로 변환하더라도 58입니다.
@sujin 감사합니다! 57.99..일줄은 몰랐네요..
댓글을 작성하려면 로그인해야 합니다.
xorms86 3년 전 1
단순히 29/50의 확률을 구하기 위해서 처음엔
a = (double)y / x * 100 로 하였지만 원하는 58의 값이 아닌 57이 할당되길래 연산자 우선순위 문제인가 생각되어
z = (double)y *100 / x 로 바꾸니58이 할당되었습니다.
그런데 여전히 57이 나오는 이유를 모르겠어서 질문드립니다.