Reply to Re: ROUND

Your name:

Reply:


Posted by Jerry Stuckle on 12/27/06 00:54

kkmigas@gmail.com wrote:
> 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.
>
>

This is the exact same problem you reported in comp.databases.mysql, and
the solution is exactly the same.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[Back to original 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

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