作者 主題: [問題]mysql round function  (閱讀 8051 次)

0 會員 與 1 訪客 正在閱讀本文。

asako

  • 活潑的大學生
  • ***
  • 文章數: 242
    • 檢視個人資料
[問題]mysql round function
« 於: 2007-03-20 15:25 »
當我下
select round(0.05,1) from dual
系統回傳 0 ,可是以四捨五入來說應該是0.1才對
如果下的是
select round(0.06,1) from dual
系統回傳 0.1
所以說 mysql 應該是五捨六入才對

怎樣改才會變成 四捨五入?

剛寫錯了,重新修正一下
給樓下的大哥,你可以實際跑跑看嗎?
第一個 sql 嗎?
我的 mysql 版本為 4.1.22-community-nt

最新測試 select round(0.05,1) from dual 在 mysql 5.x 上 系統傳回 0.1



在 mysql 4.1X 的測試

mysql> select round(0.1055,3);
+-----------------+
| round(0.1055,3) |
+-----------------+
|           0.105 |
+-----------------+
1 row in set

mysql> select round(0.1054,3);
+-----------------+
| round(0.1054,3) |
+-----------------+
|           0.105 |
+-----------------+
1 row in set

mysql> select round(0.1056,3);
+-----------------+
| round(0.1056,3) |
+-----------------+
|           0.106 |
+-----------------+
1 row in set

mysql>

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
[問題]mysql round function
« 回覆 #1 於: 2007-03-20 15:39 »
你的 mysql 有問題吧. 至少, 不管怎麼跑, 第二個就不可能是 1.
上頭兩個應該都是 0.1

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[問題]mysql round function
« 回覆 #2 於: 2007-03-20 16:53 »
代碼: [選擇]
[darkhero@home ~]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10465 to server version: 4.1.11-Max-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select round(0.1055,3);
+-----------------+
| round(0.1055,3) |
+-----------------+
|           0.106 |
+-----------------+
1 row in set (0.00 sec)

mysql> select round(0.1054,3);
+-----------------+
| round(0.1054,3) |
+-----------------+
|           0.105 |
+-----------------+
1 row in set (0.00 sec)

mysql> select round(0.1056,3);
+-----------------+
| round(0.1056,3) |
+-----------------+
|           0.106 |
+-----------------+
1 row in set (0.00 sec)

mysql>


跟你的不一樣...

我用的 MySQL ..
代碼: [選擇]

mysql> status
--------------
mysql  Ver 14.7 Distrib 4.1.11, for mandrake-linux-gnu (i586)
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[問題]mysql round function
« 回覆 #3 於: 2007-03-20 16:55 »
另外一台
代碼: [選擇]

mysql> status
--------------
mysql  Ver 14.12 Distrib 5.0.24, for mandriva-linux-gnu (i586) using readline 5.1

Connection id:          155726
Current database:
Current user:           darkhero@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.24-Max
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 36 days 1 hour 5 min 12 sec

Threads: 1  Questions: 4  Slow queries: 0  Opens: 12  Flush tables: 1  Open tables: 6  Queries per second avg: 0.000
--------------

mysql> select round(0.1055,3);
+-----------------+
| round(0.1055,3) |
+-----------------+
|           0.106 |
+-----------------+
1 row in set (0.02 sec)

mysql> select round(0.1054,3);
+-----------------+
| round(0.1054,3) |
+-----------------+
|           0.105 |
+-----------------+
1 row in set (0.00 sec)

mysql> select round(0.1056,3);
+-----------------+
| round(0.1056,3) |
+-----------------+
|           0.106 |
+-----------------+
1 row in set (0.00 sec)




或許是你的 MySQL 有問題?
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

asako

  • 活潑的大學生
  • ***
  • 文章數: 242
    • 檢視個人資料
[問題]mysql round function
« 回覆 #4 於: 2007-03-20 17:18 »
換了一個版本還是一樣,難到是 linux 版跟 win 版不一樣?
mysql> select round(0.1055,3);

+-----------------+
| round(0.1055,3) |
+-----------------+
|           0.105 |
+-----------------+
1 row in set

mysql> select round(0.1054,3);

+-----------------+
| round(0.1054,3) |
+-----------------+
|           0.105 |
+-----------------+
1 row in set

mysql>  select round(0.1056,3);
+-----------------+
| round(0.1056,3) |
+-----------------+
|           0.106 |
+-----------------+
1 row in set

mysql>  select version();
+---------------+
| version()     |
+---------------+
| 4.0.26-nt-log |
+---------------+
1 row in set

mysql>

asako

  • 活潑的大學生
  • ***
  • 文章數: 242
    • 檢視個人資料
[問題]mysql round function
« 回覆 #5 於: 2007-03-20 17:20 »
查原廠文件得知

Before MySQL 5.0.3, the behavior of ROUND() when the argument is halfway between two integers depends on the C library implementation. Different implementations round to the nearest even number, always up, always down, or always toward zero. If you need one kind of rounding, you should use a well-defined function such as TRUNCATE() or FLOOR() instead.


在原廠的 User Comments 裡 有提一些解決方案

TRUNCATE(num + (SIGN(num) * 0.0005), 3)

請使用 windows 的 mysql 4.xx 的使用者注意一下。

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4050
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
[問題]mysql round function
« 回覆 #6 於: 2007-03-20 17:20 »
for Windows

代碼: [選擇]
mysql> select round(0.1055,3);
+-----------------+
| round(0.1055,3) |
+-----------------+
|           0.106 |
+-----------------+
1 row in set (0.08 sec)

mysql> select version();
+---------------------+
| version()           |
+---------------------+
| 5.0.27-community-nt |
+---------------------+
1 row in set (0.00 sec)
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

harrier

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 1856
  • 性別: 男
    • 檢視個人資料
    • 國屬武裝兵
[問題]mysql round function
« 回覆 #7 於: 2007-03-20 17:26 »
看起來好像四捨六入法...
http://zh.wikipedia.org/wiki/%E6%95%B8%E5%80%BC%E4%BF%AE%E7%B4%84%E8%A6%8F%E5%89%87

不過偏偏第一個演算似乎又不合規則~
...90Net(90:1200/1203),GameNET(99:700/707),ALLNet(92:9200/3111),InfoNet(30:100/103)..MaximusCBCS(浮懷),AirNet,TenderNet,StormNet,FidoNet...
<<- www.nas.vg ->>

asako

  • 活潑的大學生
  • ***
  • 文章數: 242
    • 檢視個人資料
[問題]mysql round function
« 回覆 #8 於: 2007-03-20 17:27 »
各位學友如果還有人要測試的請測一下 MySQL 5.0.3 之前在 windows 的版本會不會,謝謝。

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
[問題]mysql round function
« 回覆 #9 於: 2007-03-20 17:28 »
手上只有 5.0.21 for windows 的...
測試結果是正確的 四捨五入 ...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/