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@xxxxxxxxxxxxx MSN: raziel_br@xxxxxxxxxxx Twitter: razielbr ICQ: 72941129 http://confraria-da-leitura.blogspot.com/ 2010/8/19 Nathan Rixham <nrixham@xxxxxxxxx> 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 > >