2016-10-26 6 views
0

나는 다음과 같은 코드를 입력 (더 컴파일 문제 또는 아무것도 없었다) :플로트를 사용하는 경우에도 5/2가 '2'로 나타나는 이유는 무엇입니까?

float y = 5/2; 
printf("%f\n", y); 

출력은 간단했다 : 2.00000

내 수학이는 잘못되지 않습니다? 또는/연산자에 잘못 되었습니까? 그것은 분열을 의미하지 않습니까? 그리고 5/2는 2.5와 같아야합니까?

도움을 주시면 대단히 감사하겠습니다.

+4

캐스팅으로 입력해야 2.0

입니다. 그러나 피연산자와 연산 자체는 정수입니다. –

+0

[관련 질문은 여기] (https://stackoverflow.com/questions/27674295/why-do-we-separately-cast-to-float-in-an-integer-division). – WhozCraig

답변

3

5int이고 2int입니다. 따라서 5/2은 정수 나누기를 사용합니다. 55.0f (또는 22.0f)으로 바꾸고 int 중 하나를 float으로 바꾸면 부동 소수점 나누기가 발생하고 2.5을 얻게됩니다. 분자 또는 분모를 명시 적으로 캐스팅하여 동일한 효과를 얻을 수도 있습니다 (예 : ((float) 5)/2).

+0

'5.' 또는'2.'이됩니다. – alk

+3

@alk : 나는 그저 0을 갖고 싶다. 그들은 진짜 목적이 없다. 그러나 쇠약 해지는 시력으로 나는 종종 그저'.'을 놓친다. 그러나 아직'.0'을 놓치지 않았다. –

+2

그러면 두 눈을 가질 확률이 높기 때문에'.00'을 사용하도록 제안 할 것입니다. ;-) – alk

1

float를 사용하는 경우에도 5/2가 '2'로 나타나는 이유는 무엇입니까?

당신이 하지 "사용 float"때문에. 5/2은 정수 나누기입니다. 그 결과 (2) 만 암시 적으로 float으로 변환되어 2. (점이 마음에 듭니다)이됩니다.

0

적절한 유형 캐스팅을 수행해야합니다.

float y = (float) 5/2 

프로그램에서는 숫자를 int으로 처리합니다.
int 두 개를 나누어 이것을 float에 작성 중입니다. 따라서, 대답은 * 결과 *`float` 때문에 당신은