You are here: Re: ROUND « PHP Programming Language « IT news, forums, messages
Re: ROUND

Posted by kkmigas@gmail.com on 12/26/06 15:17

PHP code
echo "round(10.045,2) - ".round(10.045,2)."<br />";
echo "round(20.045,2) - ".round(20.045,2)."<br />";
echo "round(30.045,2) - ".round(30.045,2)."<br />";
echo "round(40.045,2) - ".round(40.045,2)."<br />";

This is very strange:

round(10.045,2) - 10.04
round(20.045,2) - 20.05
round(30.045,2) - 30.05
round(40.045,2) - 40.05

On Dec 26, 11:57 am, "kkmi...@gmail.com" <kkmi...@gmail.com> wrote:
> I've tested the same function in the same hardware configuration and
> the only difference is the OS, so it must be the libraries the big
> problem is that i don't know witch ones to replace in order to get the
> system to solve the way i want.
>
> On Dec 22, 4:42 pm, "David T. Ashley" <d...@e3ft.com> wrote:
>
> > <kkmi...@gmail.com> wrote in messagenews:1166719766.801640.296050@42g2000cwt.googlegroups.com...
>
> > > Can some one explain if this can be fixed using php.ini settings ?
>
> > > echo "round 20.545 -".round(20.545,2)."<br>";
> > > echo "round 20.555 -".round(20.555,2)."<br>";
> > > echo "number_format 20.545 -".number_format(20.545, 2, ',',
> > > '.')."<br>";
> > > echo "number_format 20.555 -".number_format(20.555, 2, ',',
> > > '.')."<br>";
>
> > > PHP Version 4.3.0 / FreeBSD
> > > round 20.545 -20.55
> > > round 20.555 -20.56
> > > number_format 20.545 -20,55
> > > number_format 20.555 -20,55
>
> > > PHP Version 4.4.4 / CENTOS
> > > round 20.545 -20.55
> > > round 20.555 -20.55
> > > number_format 20.545 -20,55
> > > number_format 20.555 -20,55
>
> > > PHP Version 5.1.4 / Windows NT
> > > round 20.545 -20.55
> > > round 20.555 -20.56
> > > number_format 20.545 -20,55
> > > number_format 20.555 -20,56My only observation about the examples you chose is that the fractional
> > parts are infinitely repeating "radiximals" in binary.
>
> > 0.545 = 545/1000 = 109/200 (irreducible)
> > 0.555 = 555/1000 = 111/200 (irreducible)
>
> > Both of the numbers above can't be expressed as precise binary floating
> > point numbers because the denominator after reduction has prime factors that
> > are not "2".
>
> > PHP.INI may be a factor, but it may also be that something at a lower level
> > is occurring (i.e. machine arithmetic, how certain rounding settings on
> > floating-point processors or libraries are set).
>
> > In other words, you've chosen antagonistic examples.
>
> > Why don't you try 7/8 (0.875), 15/16 (0.9275), or 31/32 (0.96875) as the
> > fractional part of the numbers and see if you can get the same behavior.
> > I'm guessing that you may not.
>
> > Any fraction with a reasonable denomiator (< 2^16) that is a power of 2
> > would be a reasonable test case.
>
> > Note that these are all exactly representable by a typical machine.
>
> > Just a guess.

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация