2013-08-20 5 views
3

Je viens juste de voir ça pour la première fois. Le code source, je suis à la recherche est en CQue signifie moins de 0. (0 point)?

if(rate < 0.){ 
    ... 
} 
else{ 
    ... 
} 

Qu'est-ce qui se passe si rate=0?

+0

cela devrait être '0.0' try' sizeof (0.) '. –

+13

@GrijeshChauhan: '0.' et' 0.0' sont la même chose –

+0

@DavidRobinson oui c'est ce que je veux dire '0 '' '0.0'. –

Répondre

16

0. est un littéral de type double (et la valeur zéro). En revanche, 0 est un littéral de type int.

+3

BTW: '0' est une constante octale. ;-) Comme _that_ fait toute la différence. (C11 6.4.4.1 1) – chux

+3

@chux: Bien sûr - qui penserait autre chose? :-) –

6

Il interprète 0. comme un double (0.0) au lieu d'un nombre entier (0).

Vérifiez le lien: de "working code", montrant les différentes tailles de différents types de zéro constantes:

+6

Ce n'est certainement pas le cas: s'il fait quoi que ce soit, c'est un double plutôt qu'un int. –

+3

Oui, @Phil est correct. Vous avez besoin de 0.0f pour obtenir une valeur flottante, le double est la valeur par défaut. – ChrisCM

+0

Fixé. (Merci de noter cela.) – Jiminion

2

0. est un flottant constante et étant donné qu'il ne dispose pas d'un suffixe est un double, de la section draft C99 standard6.4.4.2constantes flottantes nous avons la grammaire suivante:

 
floating-constant: 
    decimal-floating-constant 
    hexadecimal-floating-constant 
decimal-floating-constant: 
    fractional-constant exponent-partopt floating-suffixopt 
    digit-sequence exponent-part floating-suffixopt 
[...] 
fractional-constant: 
    digit-sequenceopt . digit-sequence 
    digit-sequence .         < ---- This covers 0. 
[...] 

Nous avons alors en paragraphe 4 :

Une constante flottante non suffixée a le type double. Si suffixé par la lettre f ou F, il a type float. Si suffixe par la lettre l ou L, il a type long double.

Questions connexes