4

J'ai un nombre (disons, 34), et je veux trouver son prochain multiple de dix. Je peux le faire par:Que fait le "double" en ceil (double)?

  1. En divisant le nombre de 10
  2. Arrondi jusqu'à un nombre entier
  3. par Multiplying 10.

Après un peu de recherche, j'ai découvert que cette est le code pour que l'Objectif C:

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

Ma question est: quel est le (double), et pourquoi ne rem oving (double) l'amener à arrondir vers le bas au lieu de vers le haut? Je comprends de googling qui change le format de flotteur en "double précision" mais, pour être honnête, c'est trop compliqué pour moi. Quelqu'un peut-il fournir une explication simple de ce qu'il fait?

Répondre

5

Si vous n'avez pas la distribution, ce qui suit arrive (si le nombre est 34).

  1. en utilisant l'arithmétique entier, le nombre/10 est le numéro/10 arrondi, soit 3.
  2. Ceil (3) = 3
  3. 3 * 10 = 30

Si vous avez la la distribution, ce qui suit se produit:

  1. (Double) numéro = 34,0
  2. 34,0/10 = 3,4
  3. Ceil (3,4) = 4,0
  4. 4,0 * 10 = 40

La chose importante à réaliser est la division entière arrondit toujours vers 0.

+0

Ahhhh je l'ai! Je pensais que c'était toujours flottant, mais en ajoutant «double» en faisait une sorte de «flotteur à double précision» encore plus perfectionné. Je n'ai pas réalisé qu'il est par défaut int. Je suis en train de marquer votre question comme la réponse parce que c'est une explication plus progressive pour les débutants que celle d'Ignacio. –

+3

@Ric: Ce n'est pas "default" 'int', vous l'avez * déclaré * int'. –

+0

Donc, si je l'avais déclaré "float", n'aurais-je pas eu besoin de "double"? –

4

Il exécute number en tant que double afin que la division flottante soit effectuée au lieu de la division entière. Comparez 1/2 par rapport à 1.0/2.

+0

34/10 = 3 et 34,0/10 = 3,4. Plafond de 3,0 est 3. – vakio

+0

C'était son point, je pense. ; p –