Question: I just saw this for the first time. The source code I'm looking at is in C

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

```

What happens if `rate=0` ?

Answer: 
`0.` is a literal of type `double` (and value zero). By contrast, `0` is a literal of type `int`.
`0.` is a *floating constant* and since it does not have a suffix it is a `double`, from the [draft C99 standard](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) section `6.4.4.2` *Floating constants* we have the following grammar:

```

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.
[...] 

```

We then have in paragraph *4*:

> 
> **An unsuffixed floating constant has type double.** If suffixed by the letter f or F, it has
>  type float. If suffixed by the letter l or L, it has type long double.
> 
> 
>