저는 29를 10으로 나눌 필요가있는 곳을 쓰고 있습니다.하지만 그렇게하면 이중으로 2.9 대신 2.0000이 출력됩니다. 누군가 이것이 이것이 일어나는 이유와 그것을 고치는 방법을 설명 할 수 있습니까?C double이 예상대로 작동하지 않습니다
double a = 29/10;
output: 2.0000
저는 29를 10으로 나눌 필요가있는 곳을 쓰고 있습니다.하지만 그렇게하면 이중으로 2.9 대신 2.0000이 출력됩니다. 누군가 이것이 이것이 일어나는 이유와 그것을 고치는 방법을 설명 할 수 있습니까?C double이 예상대로 작동하지 않습니다
double a = 29/10;
output: 2.0000
예상대로 double
작품, 당신이 그것을 유형 double
의 표현을 할당되지 않은 단지입니다. 당신이이 int
, 10
함으로써, int
29
를 나눈 결과, int
이다 지정할 무엇
. 정수를 나눌 때 나머지는 버려지기 때문에 2
입니다.
29
에서 29.0
또는 10
에서 10.0
으로 변경하면이 문제가 해결됩니다.
29/10
은 정수 나누기를 수행합니다. 결과는 2입니다 (나머지는 9).
시도 (double)29/10
또는 29.0/10
명확성,'(double) 29/10'을 쓰는 것이 낫습니다. – chqrlie
이것은 고전적인 실수입니다. 정수 나누기를 수행하고 부동 소수점 결과를 요청하고 있습니다. 당신은 부동 소수점 연산에 대한 모든 세부 사항을 발견 할 경우 당신은 What Every Computer Scientist Should Know About Floating-Point Arithmetic을 읽어야
당신은
double a = 29.0/10.0;
와 부동 소수점 부문을 수행해야합니다.
[두 정수를 나누는 것이 왜 실수로 나오지 않는가?] 가능한 복제본 (영문) (http://stackoverflow.com/questions/16221776/why-dividing-two-integers-doesnt-get-a-float) – OldProgrammer