Hi. On Fri, Mar 01, 2002 at 01:14:43PM +0100, [EMAIL PROTECTED] wrote: > Hi, > > there are a couple of bugs related to the round() function. (See the thread > 'Can somebody help me with "round (columna,columnb) "?') > > One bug is already well known and documentet, it is related to different C > library implementations on different platforms: the result of round(2.55,1) > may be 2.5 or 2.6.
I would argue whether that is a bug... it is inconsistent on different platforms, but it is consistent with the behaviour of other programs on the same platform. You always break the one or the other thing. Since there is another way to get consistent behaviour across platforms (FLOOR((2.55*10)+0.5)/10), but I know of none to get it consistent with the platform, I prefer the current behaviour. [...] > While investigating this issue, I came across what I think is a third bug: > > solaris, 3.23.39-log: > > mysql> select round(0.5,0),round(0.55,1),round(0.555,2); > +--------------+---------------+----------------+ > | round(0.5,0) | round(0.55,1) | round(0.555,2) | > +--------------+---------------+----------------+ > | 0 | 0.6 | 0.56 | > +--------------+---------------+----------------+ > 1 row in set (0.00 sec) > > If 0.5 is rounded down to 0, why is 0.55 and 0.555 rounded up to 0.6 and > 0.56? > > I would have expected 0/0.5/0.55 or 1/0.6/0.56 Well, if at all, I don't think that this is a new bug, but a reincarnation of the "bug" above: it's the behaviour of your underlying system lib. But, in fact, I think it is only a misunderstanding. Note that only a limited amount of decimal numbers can represented in the internal floating point format. Others will be represented by one of its neighbours, e.g. mysql> SELECT 0.55000000000000000000000; +---------------------------+ | 0.55000000000000000000000 | +---------------------------+ | 0.55000000000000004440892 | +---------------------------+ 1 row in set (0.00 sec) If you look at this representation, it is obvious, that this number will be rounded up to 0.6. The same goes for 0.555. Regards, Benjamin. -- [EMAIL PROTECTED] --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php