2016-02-12 1 views
4

je l'exemple folowing:Est-ce que doubler en int renvoie le nombre arrondi?

double x = 2.5; 
int n = (int)x; 
int k = (int) floor(x); 

Est-ce que la coulée à double int renvoie le nombre vers le bas tour? ou je devrais utiliser la fonction de plancher?

+1

il retournera * tronqué * valeur: '2.5 -> 2'; '2.99 -> 2' (partie décimale enlevée) –

+0

En relation: [Pourquoi un flottant converti en un entier est-il arrondi en C?] (Http://stackoverflow.com/q/35008621/3049655) –

+1

" devrait utiliser la fonction de plancher? " -> pensez à utiliser le '(int) round (x)' pour arrondir au plus proche. – chux

Répondre

13

Soyez prudent avec les nombres négatifs. Casting tronquera vers 0. floor tronquera vers l'infini négatif.

Si la valeur est positive, les deux méthodes renvoient la même valeur tronquée.

+0

Droite. J'ai complètement oublié les règles d'arrondi négatives et ce que signifie arrondir vers le haut ou vers le bas. – SergeyA

7

bien (int) tronque la valeur initiale double (fraction retirée)

2.1 -> 2 
    2.5 -> 2 
    2.99 -> 2 

il ressemble floor, mais ils ne sont pas les mêmes en cas de nombres négatifs:

(int)-2.1 -> -2 
    floor(-2.1) -> -3.0 

floor renvoie la valeur entière maximale inférieure ou égale à l'argument donné

0

Méfiez-vous de la limitation de int et double.

int main(void) 
{ 
    double val1 = INT_MAX + 10.5; 
    int val2 = val1; 

    printf("val1 = %f\nval2 = %d\n", val1, val2); 

    return (0); 
} 

Ce produit la sortie ci-dessous:

val1 = 2147483657.500000 
val2 = -2147483648 

(Je ne sais pas si INT_MAX est standard, désolé).

+1

lancer un double hors de portée à int est un comportement indéfini – bolov

+0

Je ne savais pas, c'est une raison de plus d'être prudent lors de la distribution. –

+0

http://stackoverflow.com/q/30851490/2805305 – bolov