문제

Visual Studio 2008에서 다음 코드를 컴파일하고 실행할 때마다 :

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2;
Console::WriteLine(whole_number);

답은 25 인 반면 26의 잘못된 값을 얻습니다.

그러나 복식에서 정적 캐스트를 사용하면 25의 정답을 얻습니다.

잘못된 출력을 어떻게 설명 할 수 있습니까?

도움이 되었습니까?

해결책

절대적으로 옳습니다.

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2; // int whole_number = 26.0;
Console::WriteLine(whole_number);

대신 무엇을 기대 하시겠습니까? 컴파일러는 먼저 오른쪽을 평가 한 다음 int로 암시 적으로 변환합니다. 따라서, 26.0 becomes 26

추가하기 전에 캐스팅하면 추가 할 것입니다. 10 그리고 15, 결과 25 :)

다른 팁

실제로 자동 변환을 수행 할 때 플로팅 포인트 번호를 어느 쪽이든 라운드에 의존 할 수 없습니다. 26.0이 26.00005로 표현되면 26으로 반올림되며 25.99995로 표시되면 25로 반올림됩니다. 확실히 원한다면 표준 C 기능을 사용하십시오. round, 정의 된 math.h. 속담 따라서 26.0은 26이됩니다 정확하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top