Что делает "double" в ceil (double)? - PullRequest
4 голосов
/ 12 мая 2011

У меня есть число (скажем, 34), и я хочу найти его следующее кратное десяти.Я могу сделать это следующим образом:

  1. Деление числа на 10
  2. Округление до целого числа
  3. Умножение на 10.

После небольшого исследования я обнаружил, что это код для цели в Цели C:

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

Мой вопрос: для чего нужен (double), и почему удаление (double) вызываетвместо округления вверх?

Я понимаю, что, используя поиск в Google, который изменяет формат с плавающей запятой на "двойную точность", но, честно говоря, это слишком сложно для меня.Кто-нибудь может дать простое объяснение того, что он делает?

Ответы [ 2 ]

5 голосов
/ 12 мая 2011

Если у вас нет приведения, происходит следующее (если число равно 34).

  1. Используя целочисленную арифметику, число / 10 - это число / 10, округленное в меньшую сторону, то есть 3.
  2. ceil (3) = 3
  3. 3 * 10 = 30

Если у вас есть приведение, происходит следующее:

  1. (double) число = 34,0
  2. 34,0 / 10 = 3,4
  3. ceil (3,4) = 4,0
  4. 4,0 * 10 = 40

Важная вещьчтобы понять это целочисленное деление всегда округляется до 0.

4 голосов
/ 12 мая 2011

Приводит number как double, так что деление с плавающей запятой выполняется вместо целочисленного деления. Сравните 1/2 с 1.0/2.

...