*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,
precision math functions <http://www.php.net/manual/en/ref.bc.php> and
Cassiano Dal Pizzol
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"
>> Using floor() those the exact same thing.
>> Why is this?
> echo serialize("34.80" * 100);
> int simply chops it, hence 3479
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php