### 1. The datatype numbers

If you want to calculate with variables (be more specific: with its content) you must use a data type which is used for numbers. One lazy way is to write a number in string and calculate with these strings.

<?php

echo "5"+"9";

?>

This will generated `14`

as expected. However php didn't calculated with
numbers but with strings. This doesn't work normally (or what do you expected for
`"hello" + "xyz"`

?), but the automatically typecasting
take place here. The strings are got casted to *real* numbers first.
In php there exists two types, the integer and float
numbers.

### 2. Integer numbers

Integer numbers are any whole numbers, they don't have any decimal places. E.g
`5`

, `31`

and `199`

are integer numbers, but also
`-1`

, `-10`

and `-44`

. In php you write numbers
as they are, the php interpreter reads the sequence of digits as a number.

<?php

$var = 5;

$var2 = 31;

$var3 = -10;

?>

Its also possible to write integer numbers in hexadecimal or octal notation, if you
know how to calculate them. For hexadecimal notation you use the prefix `0x`

,
for octal notation the prefix `0`

(*normal* integer numbers starts
with the highest digit or are *zero* anyway).

<?php

$var = 0xFF; // hexadecimal (255), often use for protocols

$var2 = 0763; // octal (499), often used for chmod

$var3 = 0; // normal zero, it doesn't matter if hex-, oct- or decimal

?>

### 3. Float numbers

Float numbers are values *with* decimal places like `5.7`

,
`12.25`

or `-4.07`

, but also `10.0`

, `3.1E-10`

or `4.5e3`

.

<?php

$var = 5.7;

$var2 = 3.1E-10;

$var = .1;

?>

Float numbers can be easily recognized by the decimal point `.`

, so you dont
use the comma (`,`

) for the decimal places. As the dot `.`

is also used for string concatenation you must be very carefully if you concat
float numbers with strings. Sometimes you must use parentheses.

<?php

echo 'Percent value:'.77.3.'%'; // won't work

echo 'Percent value:'.(77.3).'%'; // works

echo 'Percent value:'. 77.3 .'%'; // works, these spaces "helps" php to parse this line correct

?>

### 4. Memory usage of integers and floats

There may be a question why to use integer and float numbers as float numbers
can do *more*. Both types use (basically) the same memory usage but
use a different usage of it. Integer values are saved very easily. Imagine you
save an integer value into a 64 bit field. One bit is reserved for the sign
(more or less, check Two's complement).
The remaining 63 bits are for the significations. A bit with the value
`1`

means the integer number got this mentioned signification. The sum
of all results in the value of the integer number. These significations starts
from `2^0`

(1) and goes up to `2^62`

(4611686018427387904). As an
example the number 50 got the significations 32, 16 and 2. On bit level these are the
bits 1, 4 and 5. These are put into a 64 bit field.

However, integer numbers are saved in the Two's complement.

Float numbers are saved in a different way. As we can save decimal places too we cannot
use the same significations as for integer numbers. Float numbers are normally
saved in the IEEE 754 format.
For a 32 bit float number one bit is used for the sign, 8 bits for the exponent and
23 bits for the mantissa. The mantissa builds a number between around 0 and 1.
On this value a base-2-exponentation is multiplied. This exponentation is build with
the mentioned 8 bits. Depending on the choosen standard the mantissa is moved
*left* (if the factor is big, like 2^50) or moved *right* (if the factor
is small, like 2^-50). With the sign bit you get a complete number. So you cannot
save any number with decimal places but only a specific number of digits of the
number. But thats normally no problem as we use it all the time like giving the
weight of something in *31.6 tons* instead of *31.6346800235 tons*.