2016-11-05 3 views
0

저는 29를 10으로 나눌 필요가있는 곳을 쓰고 있습니다.하지만 그렇게하면 이중으로 2.9 대신 2.0000이 출력됩니다. 누군가 이것이 이것이 일어나는 이유와 그것을 고치는 방법을 설명 할 수 있습니까?C double이 예상대로 작동하지 않습니다

double a = 29/10; 

output: 2.0000 
+1

[두 정수를 나누는 것이 왜 실수로 나오지 않는가?] 가능한 복제본 (영문) (http://stackoverflow.com/questions/16221776/why-dividing-two-integers-doesnt-get-a-float) – OldProgrammer

답변

3

예상대로 double 작품, 당신이 그것을 유형 double의 표현을 할당되지 않은 단지입니다. 당신이이 int, 10함으로써, int29를 나눈 결과, int이다 지정할 무엇

. 정수를 나눌 때 나머지는 버려지기 때문에 2입니다.

29에서 29.0 또는 10에서 10.0으로 변경하면이 문제가 해결됩니다.

1

29/10은 정수 나누기를 수행합니다. 결과는 2입니다 (나머지는 9).

시도 (double)29/10 또는 29.0/10

+1

명확성,'(double) 29/10'을 쓰는 것이 낫습니다. – chqrlie

1

이것은 고전적인 실수입니다. 정수 나누기를 수행하고 부동 소수점 결과를 요청하고 있습니다. 당신은 부동 소수점 연산에 대한 모든 세부 사항을 발견 할 경우 당신은 What Every Computer Scientist Should Know About Floating-Point Arithmetic을 읽어야

당신은

double a = 29.0/10.0; 

와 부동 소수점 부문을 수행해야합니다.

관련 문제