mysql:6667
From: "matsuda" <"matsuda" <matsuda@xxxxxxxxxx>>
Date: Thu, 5 Dec 2002 19:38:03 +0900
Subject: [mysql 06667] ROUND 関数の四捨五入について
こんにちわ 初めて参加させていただきます、まつだです。 いつも過去ログを見て参考にさせていただいています。 環境:Windows2000 SP1 MySQL:4.0.4-beta-max ローカルでテストしています。 ROUND関数を使って、小数点第1位を四捨五入し整数に丸めたいのですが、 小数点第1位が"5"の時、四捨五入されていないようなのです。 <MySQL実行内容> ------------------------------------------------- mysql> create table test(tanka decimal(15,3) null); Query OK, 0 rows affected (0.09 sec) mysql> insert into test values(890); Query OK, 1 rows affected (0.01 sec) mysql> select * from test; +----------+ | tanka | +----------+ | 890.000 | +----------+ 1 row in set (0.00 sec) mysql> update test set tanka=round(tanka*0.95,0); Query OK, 1 rows affected (0.00 sec) Row matched: 1 Changed: 1 Warnings: 0 mysql> select * from test; +----------+ | tanka | +----------+ | 845.000 | +----------+ 1 row in set (0.00 sec) ------------------------------------------------- 上記SQL文より、(update test set tanka=round(tanka*0.95,0);) 890*0.95=845.5 となるので、小数点第1位を四捨五入したら 846 になるはずなのですが、結果は 845 となってしまいます。 このことから下記のようなROUND関数を使った値を直接INSERT文を使って テーブルにデータを挿入してみましたが、以下のような結果になってしまい ました。 ・ROUND(845.49,0) ---> 845 × ・ROUND(845.5 ,0) ---> 845 × ・ROUND(845.50,0) ---> 845 × ・ROUND(845.51,0) ---> 846 ○ ・ROUND(845.59,0) ---> 846 ○ フィールドの型に原因があるのかと思い、double型にしてみましたが 結果は同じでした。 また、小数点第1位が"5"以外のときは、期待通りの四捨五入の結果が 返ってきます。 さらに、小数点第1位以外でも試してみましたが、やはり結果は同じでした。 これはMySQLが内部的に行っている(のかな?)処理に原因があるので しょうか? もしくは、適さないフィールドの型とかがあるのでしょうか? 原因がわからず困ってしまい、MLに質問させていただきました。 以上、よろしくお願いいたします。 まつだ
-> 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]