4

숫자가 있습니다 (34라고 가정). 다음 10의 배수를 찾고 싶습니다. 나는이 작업을 수행 할 수 있습니다 :"double"은 ceil (double)에서 무엇을합니까?

  1. 10
  2. 에 의해 수를 나누면 연구의 조금 후
  3. 배가

(10)에 의해 정수로 반올림,이 것을 발견 목표 C에 해당하는 코드는 다음과 같습니다

int number = 34; 
int roundedNumber = ceil((double)number/10)*10; 

내 질문은 : 대한 (double) 무엇이며, 왜 REM 수면을한다 (double)을 사용하면 위로가 아닌 반올림이 발생합니까?

플로팅 형식을 "배정 밀도"로 변경하는 것으로부터 알지만 솔직히 말해서 이것은 나에게 너무 복잡합니다. 누구든지 자신이하는 일에 대한 간단한 설명을 해줄 수 있습니까?

답변

5

캐스트가없는 경우 다음과 같은 결과가 발생합니다 (숫자가 34 인 경우). 정수 연산을 사용하여

  1. , 수/10 수/10 즉, 3을 내림입니다
  2. 천장을 만들다 (3) = 3
  3. 3 * 10 = 30

이있는 경우 캐스트, 다음과 같은 상황이 발생합니다

  1. (더블) 번호 = 34.0
  2. 34.0/10 = 3.4
  3. ,
  4. CEIL (3.4) = 4.0
  5. 4.0 * 10 = 40

실현하는 중요한 것은 정수 나누기는 항상 0

+0

아아아, 알았어! 나는 항상 떠 다니는 줄 알았지 만, 'double'을 추가하는 것은 새로운 종류의 더 좋은 "double precision float"을 만들었습니다. 나는 그것이 int로 디폴트 된 것을 깨닫지 못했다. 저는 Ignacio 's보다 단계별로 초보자 친화적 인 설명이기 때문에 답을 귀하의 질문으로 표시하고 있습니다. –

+3

@Ric :''int''를''default '하지 않고,''int''를 선언했습니다. –

+0

그래서 'float'이라고 선언했다면 'double'은 필요하지 않겠습니까? –

4

numberdouble으로 캐스팅하므로 정수 나누기 대신 부동 소수점 나누기가 수행됩니다. 1/21.0/2을 비교하십시오.

+0

10분의 34 = 3 34.0/10 = 3.4으로 반올림된다. 3.0의 천장은 3입니다. – vakio

+0

그것이 그의 주장이었습니다. ; p –