## Floats and Doubles

Floats are numeric values that can have decimal precision such as 2.3, 4.55, and -204.808. Doubles have twice the decimal precision than floats. Floats and doubles are defined with the **float** and **double** keywords respectively.

```
float f;
float weight;
double d;
double milligrams;
f=2.3;
d=3.3/4.4;
```

During assignment, values must have at least one number to the left of the decimal place.

```
/* does not work */
float f = .1;
double d = .5;
/* must use */
float f = 0.1;
double d = 0.5;
```

When assigning mathematical expressions to a float or a double, rounding might occur. This happens if none of the numbers have at least one number to the right of the decimal place.

```
float f = 4/3; /* f = 1.000 */
float f = 4.0/3; /* f = 1.333... */
double d = 4/3; /* d = 1.000 */
double d = 4.0/3; /* d = 1.333... */
```

**Integers** can be assigned to a float or double variable with no real change.

```
float f = 3; /* f = 3.0000 */
double d = 4; /* d = 4.0000 */
```

Gel will attempt to convert **strings** if assigned to a float or double. If conversion is not possible, then the assigned value is 0.

```
float f = "3.4"; /* f = 3.4 */
float f = "hello"; /* f = 0.0 */
```

If the string contains a number as a prefix, the number will be stored while the rest of the string will be ignored. The same is NOT true if the number is at the end of the string.

```
float f = "3 pigs"; /* f = 3.0 */
float f = "3.5 pigs"; /* f = 3.5 */
float f = "run 4"; /* f = 0 */
```