# [PHP] cast changes value

`http://www.php.net/manual/en/language.types.float.php`
```

*Warning* Floating point precision

It is typical that simple decimal fractions like *0.1* or *0.7* cannot be
converted into their internal binary counterparts without a small loss of
precision. This can lead to confusing results: for example, *
floor((0.1+0.7)*10)* will usually return *7* instead of the expected *8*,
since the internal representation will be something like *7.9*.

This is due to the fact that it is impossible to express some fractions in
decimal notation with a finite number of digits. For instance, *1/3* in
decimal form becomes *0.3*.

So never trust floating number results to the last digit, and never compare
floating point numbers for equality. If higher precision is necessary,
thearbitrary
precision math functions <http://www.php.net/manual/en/ref.bc.php> and
gmp<http://www.php.net/manual/en/ref.gmp.php> functions
are available.

<http://www.php.net/manual/en/language.types.float.php>
-----
Cassiano Dal Pizzol
cassi...@dalpizzol.com
MSN: raziel...@hotmail.com
ICQ: 72941129
http://confraria-da-leitura.blogspot.com/

2010/8/19 Nathan Rixham <nrix...@gmail.com>

Martín Marqués wrote:
>
>> I have values with 2 decimals that I multiple by 100 to make them
>> integers, but to be sure I do a cast using (int).
>>
>> The thing is that (int) is changing the value of the integer. Here is
>> a var_dump of the original value, the value * 100, and the value after
>> casting to int.
>>
>> string(5) "34.80"
>> float(3480)
>> int(3479)
>>
>> Using floor() those the exact same thing.
>>
>> Why is this?
>>
>>
> echo serialize("34.80" * 100);
>
> 3479.99999999999954525264911353588104248046875
>
> int simply chops it, hence 3479
>
> :)
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
```