亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL中ROUND函數進行四舍五入操作陷阱分析

2024-07-25 19:08:34
字體:
來源:轉載
供稿:網友

本文實例講述了MySQL中ROUND函數進行四舍五入操作陷阱。分享給大家供大家參考,具體如下:

在MySQL中, ROUND 函數用于對查詢結果進行四舍五入,不過最近使用ROUND函數四舍五入時意外發現并沒有預期的那樣,本文將這一問題記錄下來,以免大家跟我一樣犯同樣的錯誤。

問題描述

假如我們有如下一個數據表 test ,建表語句如下

CREATE TABLE test ( id int(11) NOT NULL AUTO_INCREMENT, field1 bigint(10) DEFAULT NULL, field2 decimal(10,0) DEFAULT NULL, field3 int(10) DEFAULT NULL, field4 float(15,4) DEFAULT NULL, field5 float(15,4) DEFAULT NULL, field6 float(15,4) DEFAULT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我們創建了一個名為 test 的表,出了 id 字段之外還包含了多個字段,擁有這不同的數據類型。我們向這個表中插入一條數據

INSERT INTO test (field1, field2, field3, field4, field5, field6) VALUE (100, 100, 100, 1.005, 3.5, 2.5);

插入之后表中的數據是這樣的

mysql> select * from test;+----+--------+--------+--------+--------+--------+--------+| id | field1 | field2 | field3 | field4 | field5 | field6 |+----+--------+--------+--------+--------+--------+--------+| 1 |  100 |  100 |  100 | 1.0050 | 3.5000 | 2.5000 |+----+--------+--------+--------+--------+--------+--------+1 rowin set (0.00 sec)

如果現在我們執行下面這個SQL,你覺得結果會是什么樣的呢?

SELECT round(field1 * field4), round(field2 * field4), round(field3 * field4), round(field1 * 1.005), round(field2 * 1.005), round(field3 * 1.005), round(field5), round(field6)FROM test;

最初一直以為這樣的結果肯定是都是 101 ,因為上面這六個取值結果都是對 100 * 1.005 進行四舍五入,結果肯定都是 101 才對,而后面兩個肯定是 4 和 3 才對,但是最終的結果卻是與設想的大相徑庭

*************************** 1. row ***************************round(field1 * field4): 100round(field2 * field4): 100round(field3 * field4): 100 round(field1 * 1.005): 101 round(field2 * 1.005): 101 round(field3 * 1.005): 101    round(field5): 4    round(field6): 21 rowin set (0.00 sec)

為什么會這樣?

同樣是100*1.005,為什么從數據庫中的字段相乘得到的結果和直接字段與小數相乘得到的不一樣呢?

對這個問題百思不得其解,各種百度谷歌無果。。。沒辦法,還得靠自己,這個時候最有用的就是官網文檔了,于是查詢了mysql官方文檔中關于ROUND函數的部分,其中包含下面兩條規則

  • For exact-value numbers, ROUND() uses the “round half up” rule對于精確的數值, ROUND 函數使用四舍五入
  • For approximate-value numbers, the result depends on the C library. On many systems, this means that ROUND() uses the “round to nearest even” rule: A value with any fractional part is rounded to the nearest even integer. (對于近似值,則依賴于底層的C函數庫,在很多系統中 ROUND 函數會使用“取最近的偶數”的規則)

通過這兩條規則,我們可以看出,由于我們在使用兩個字段相乘的時候,最終的結果是按照 float 類型處理的,而在計算機中 float 類型不是精確的數,因此處理結果會按照第二條來,而直接整數字段與1.005這樣的小數運算的結果是因為兩個參與運算的值都是精確數,因此按照第一條規則計算。從 field5 和 field6 執行 ROUND 函數的結果可以明確的看確實是轉換為了最近的偶數。

總結

從這個例子中可以看到,在MySQL中使用ROUND還是要非常需要注意的,特別是當參與計算的字段中包含浮點數的時候,這個時候計算結果是不準確的。

希望本文所述對大家MySQL數據庫計有所幫助。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲三级av在线| 久久99久久99精品中文字幕| 欧美超级乱淫片喷水| 91情侣偷在线精品国产| 国产精品高清在线观看| 精品视频久久久久久| 欧美午夜性色大片在线观看| 国产精品第七影院| 国产精品露脸av在线| 亚洲人午夜精品| 热草久综合在线| 久久97久久97精品免视看| 欧美一级大片在线免费观看| 午夜精品视频在线| 欧美成人中文字幕在线| 欧美另类极品videosbestfree| 国产福利精品av综合导导航| 日韩av最新在线观看| 精品视频中文字幕| 亚洲美女精品成人在线视频| 成人性生交大片免费看小说| 亚洲码在线观看| 国产精品久久久久久久久久三级| 午夜精品在线视频| 青青久久av北条麻妃海外网| 国产日韩av在线| 亚洲毛片在线免费观看| 91美女片黄在线观| 久久夜色精品亚洲噜噜国产mv| 51久久精品夜色国产麻豆| 国产成人涩涩涩视频在线观看| 欧美精品在线视频观看| 97久久精品人人澡人人爽缅北| 成人性教育视频在线观看| 欧美精品情趣视频| 日本三级韩国三级久久| 国产69久久精品成人看| 精品国产户外野外| 成人中心免费视频| 国产精品高潮视频| 精品美女久久久久久免费| 日韩美女视频免费在线观看| 精品免费在线观看| 影音先锋欧美在线资源| 在线不卡国产精品| 在线国产精品视频| 亚洲欧洲第一视频| 91麻豆国产语对白在线观看| 国产日韩欧美在线观看| 国产美女精品免费电影| 黑人欧美xxxx| 亚洲欧美一区二区激情| 91精品啪aⅴ在线观看国产| 亚洲片在线资源| 欧美一级淫片aaaaaaa视频| 色妞久久福利网| 国产日本欧美一区二区三区| 亚洲一级黄色av| 久久频这里精品99香蕉| 8090成年在线看片午夜| 精品露脸国产偷人在视频| 久热99视频在线观看| 日本道色综合久久影院| 91国产视频在线播放| 国产视频久久久久| 欧美激情成人在线视频| 国产精品视频xxxx| 97碰碰碰免费色视频| 在线播放日韩精品| 亚洲网址你懂得| 国产精品激情自拍| 日韩欧美国产网站| 欧美日韩国产成人高清视频| 亚洲欧美精品伊人久久| 丰满岳妇乱一区二区三区| 国产a级全部精品| 国内精品久久久久久影视8| 主播福利视频一区| 欧美放荡办公室videos4k| 日韩在线免费高清视频| 国产精品久久久久久久天堂| 久久国产精品免费视频| 欧美日韩性视频| 国内精品久久久久久影视8| 亚洲国产另类久久精品| 色午夜这里只有精品| 日韩电影中文字幕| 国产日韩av在线| 欧美激情高清视频| 成人欧美在线观看| 91精品国产高清自在线看超| 夜夜嗨av一区二区三区四区| 欧美在线观看日本一区| 国产精品九九久久久久久久| 欧美黑人巨大精品一区二区| 中文字幕亚洲情99在线| 91精品国产777在线观看| 欧美放荡办公室videos4k| 久久久久久成人| 国产精品免费在线免费| 久久影院中文字幕| 亚洲人精选亚洲人成在线| 国产成人avxxxxx在线看| 国产精品久久久久久久久久久新郎| 97国产真实伦对白精彩视频8| 亚洲日韩欧美视频一区| 日韩一二三在线视频播| 久久精品男人天堂| 2019中文字幕在线| 中日韩午夜理伦电影免费| 亚洲男人天天操| 久久的精品视频| 亚州av一区二区| 欧美日韩在线第一页| 免费91麻豆精品国产自产在线观看| 亚洲性视频网站| 国产精品欧美久久久| 久久国产精品电影| 日产精品久久久一区二区福利| 88xx成人精品| 成人av番号网| 欧美成人免费播放| 国产99久久精品一区二区| 久久精品99久久香蕉国产色戒| 国产91成人在在线播放| 亚洲欧美成人精品| 国产精品18久久久久久首页狼| 亚洲男人天堂网| 日本精品久久久| 日韩黄在线观看| 亚洲欧美国产视频| 91丝袜美腿美女视频网站| 久久九九精品99国产精品| 九九精品在线视频| 亚洲视频专区在线| 久久这里只有精品99| 欧美成人精品不卡视频在线观看| 日韩精品在线免费| 最近免费中文字幕视频2019| 国产精品白嫩美女在线观看| 茄子视频成人在线| 久久久精品视频在线观看| 黄色一区二区在线观看| 日韩av电影在线免费播放| 在线观看精品国产视频| 国产一区二区三区三区在线观看| 亚洲欧美综合图区| 日韩av免费在线| 4444欧美成人kkkk| 久久精品国产v日韩v亚洲| 久久91亚洲人成电影网站| 日韩欧美国产骚| 国产精品久久精品| 欧美亚洲在线视频| 中文字幕亚洲国产| 亚洲激情成人网| 国产精品久久久久久婷婷天堂| 亚洲欧美国产va在线影院| 91欧美精品成人综合在线观看| 日本久久亚洲电影| 欧美电影免费在线观看| 久久久久久久999精品视频| 日韩国产欧美精品一区二区三区| 国产精品pans私拍|