mysql:6671
From: Takeyuki Miyagawa <Takeyuki Miyagawa <miyagawa@xxxxxxxxxx>>
Date: Fri, 06 Dec 2002 19:59:34 +0900
Subject: [mysql 06671] Re: ROUND 関数の四捨五入について
みやがわです。 > これはMySQLが内部的に行っている(のかな?)処理に原因があるので > しょうか? > もしくは、適さないフィールドの型とかがあるのでしょうか? 参考になればといった程度なのですが・・・・。 原因としてはROUNDの実装問題ではないかと思われます。 Item_func.cppで Item_func_roundと言うメソッドが定義されています。 ROUND関数の実装部分のようなのですが、関数内で config-win.hのヘッダにある inline double rint(double nr) { double f = floor(nr); double c = ceil(nr); return (((c-nr) >= (nr-f)) ? f :c); } を呼んでいます。 たとえば nr 845.5 の場合に f 845 c 846 となり、本来ならば return でcの846を返すべきところが fの845を戻す作りになっているからだと思います。 「>=」でなく 「>」 にすればいいものなのでは、と思いますが。 ただ、ソースを見ただけの話なので、確証はありませんが・・・。 他のOSの場合には #define rint(A) floor((A)+0.5) で行っているようです。なぜ、windowsだけ違うかの理由はわかりません。 また、修正されていない理由等は、自分にもわかりません。 ---- Takeyuki Miyagawa miyagawa@xxxxxxxxxx
6667 2002-12-05 19:38 ["matsuda" <matsuda@x] ROUND 関数の四捨五入について 6668 2002-12-05 23:59 ┣[KAWAJI Shinya <kawaj] 6669 2002-12-06 00:08 ┃┗[KAWAJI Shinya <kawaj] -> 6671 2002-12-06 19:59 ┗[Takeyuki Miyagawa <m] 6675 2002-12-07 21:42 ┣[Masahiro Utsumi <uts] 6676 2002-12-09 00:43 ┗["kossy" <kossy@xxxxx] 6677 2002-12-09 13:23 ┗["matsuda" <matsuda@x]