cast changes value
| From: | Cassiano Dal Pizzol | Date: | Thu, 19 Aug 2010 19:30:11 +0000 |
| Subject: | cast changes value | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-307580@lists.php.net to get a copy of this message | ||
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
cassiano@dalpizzol.com
MSN: raziel_br@hotmail.com
Twitter: razielbr
ICQ: 72941129
http://confraria-da-leitura.blogspot.com/
2010/8/19 Nathan Rixham <nrixham@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
>
>