2013-06-17 3 views
2

호기심 이유왜 5/10 = 0.0입니까? 에 관한

double progress = 5/10; 

쇼 있다는 내 변수 progress = 0.0, 오른쪽 0.5 같아야?

가 명시 적으로

double progress = 0.5; 

progress을 정의하는 것은 제대로 작동하지만 수학적으로하지 명시 적으로 정의해야합니다. 어쩌면 내가 도서관이나 무언가, 또는 내 두뇌를 놓친 것일 수 있습니다. Vis Studio 2012 승 7 x64.

+9

정수부 – I4V

+1

const 또는 var입니까? –

+1

예 (더블) 5/(더블) 10 –

답변

14

정수 나누기를 수행하고 있기 때문에. 대신 5.0/10.0을 시도하십시오. (또는 5.0/10 또는 5/10.0 - 피연산자 중 적어도 하나는 double 서비스를 제공합니다.)

컴파일러를 오른쪽에있는 상수 식의 값을 결정하기 위해 = 기호의 왼쪽에있는 물건을 사용하지 않습니다. 그것은 정수5정수 따라서 /같은 정수 나눗셈10을 interpets.

리터럴 숫자에 소수점을 추가하면 double으로 해석됩니다. doubleint 사이에서 나누기가 수행되면 intdouble으로 변환되고 "일반"나누기가 사용됩니다. 하지double0.5 - (double)(5/10)가 당신에게 double0에게 줄 것이다

참고. 이는 위에서 설명한 것과 같은 이유 때문입니다. 상수 표현식 정수 구분 5/10은 해당 표현식 외부의 컨텍스트가없는 것으로 해석됩니다.

+8

아니면 그냥 5.0/10. 값 중 하나가 double이면, 전체 식은 그대로 평가됩니다. – AndyPerfect

+0

5/10f도 작동합니다. –

3

두 개의 int -s를 나눠서 결과가 에 마지막으로 할당 된 int이되도록합니다. int은 분수를 나타낼 수 없으므로 반올림되었습니다. 모든 항은 정수이므로 연산은 정수 나누기입니다.

5.0/10.0을 수행하면 올바른 결과를 얻을 수 있습니다.

3

표현식 5/10은 완전한 표현식이므로 정수 수학을 사용합니다. 두 피연산자 중 하나 또는 모두를 double로 정의하여 double 연산을 얻습니다.

double progress = 5.0/10.0;