国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

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

2024-07-24 12:50:06
字體:
來源:轉載
供稿:網友

本文實例講述了MySQL中ROUND函數(shù)進行四舍五入操作陷阱。,具體如下:

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

問題描述

假如我們有如下一個數(shù)據(jù)表 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;

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

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

插入之后表中的數(shù)據(jù)是這樣的

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)

如果現(xiàn)在我們執(zhí)行下面這個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,為什么從數(shù)據(jù)庫中的字段相乘得到的結果和直接字段與小數(shù)相乘得到的不一樣呢?

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

For exact-value numbers, ROUND() uses the “round half up” rule(對于精確的數(shù)值, ROUND 函數(shù)使用四舍五入) 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函數(shù)庫,在很多系統(tǒng)中
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 开阳县| 白银市| 新巴尔虎左旗| 正蓝旗| 嘉善县| 马尔康县| 临漳县| 姜堰市| 崇左市| 谢通门县| 宁南县| 田阳县| 江阴市| 依安县| 洱源县| 万载县| 林周县| 镇沅| 金门县| 苗栗县| 淳安县| 都昌县| 体育| 开封市| 镇雄县| 墨脱县| 深水埗区| 平泉县| 阿鲁科尔沁旗| 慈利县| 炎陵县| 武强县| 宜都市| 拜泉县| 庆安县| 大丰市| 修水县| 临潭县| 当雄县| 额尔古纳市| 凌海市|