mysql踩坑集錦

1.round函數(shù)的四舍五入

1.1問題解決

今天在導(dǎo)出報表時,發(fā)現(xiàn)有個字段金額的值為 501.42990000000003元榔至,很明顯這是出現(xiàn)了精度丟失的問題了,于是我準備使用round函數(shù)進行四舍五入欺劳,取2位小數(shù)來使用唧取,但是卻發(fā)現(xiàn)round函數(shù)小坑不斷。

首先我們假定現(xiàn)在需要處理的值為 12345678.445
如果此時這個值是數(shù)值類型杰标,那么使用round函數(shù)得到的結(jié)果是


看起來我們已經(jīng)達到了目標是嗎兵怯?
但是由于我這個數(shù)值是varchar類型,實際的結(jié)果卻是



我們需要的四舍五入并沒有達成腔剂。
那么就是字符不能簡單的使用round函數(shù)進行四舍五入媒区,那么我們需要把字符轉(zhuǎn)成數(shù)值進行操作了。
第一次轉(zhuǎn)換
按照網(wǎng)上的經(jīng)驗,我們在字符串后面加了個0袜漩,結(jié)果卻依然沒有錯誤绪爸。



第二次轉(zhuǎn)換
這個我們使用cast函數(shù)

。宙攻。奠货。。這次結(jié)果完全不對座掘,為什么嗯递惋?
原因在于使用這個函數(shù)方法時,注意AS DECIMAL函數(shù)的2個參數(shù),第一個9代表的是數(shù)值有效位,第二個2代表小數(shù)的有效位帅霜,按照(9绿贞,2)來處理的話,我們能得到的最大數(shù)值是9-2=7位的整數(shù)部分,和2位的小數(shù)部分,這樣最大的數(shù)值也只能是圖中 的9999999.99了,所以我們在使用這個函數(shù)時邓馒,要根據(jù)業(yè)務(wù)情況給出合適的數(shù)值位數(shù),最后使用了20位長度蛾坯,成功達成目標


1.2 問題分析

目標達成了光酣,我們再回看下在這個問題處理中,我們都碰到了什么問題偿衰?

1:為什么會出現(xiàn)最開始501.42990000000003元這種需要轉(zhuǎn)換的數(shù)據(jù)挂疆?

通過查看sql發(fā)現(xiàn),這個金額是由單價*數(shù)量得到的下翎,而我在表結(jié)構(gòu)中缤言,單價才用了Bigdecmal類型,而數(shù)值使用了varchaer類型视事,結(jié)果就是

這就提醒我們胆萧,如果我們在建表時,嚴格按照業(yè)務(wù)數(shù)據(jù)類型建表俐东,類似這個數(shù)量采用數(shù)值類型存儲跌穗,就不出現(xiàn)的這種隱藏的BUG了。

2: 為什么在處理round在處理字符串類型的數(shù)字時虏辫,會得到不到我們想要的結(jié)果蚌吸。

首先,round函數(shù)在處理時砌庄,會根據(jù)傳入的參數(shù)羹唠,有不同的處理方法奕枢,
參數(shù)會分成兩類,一種是精確值佩微,整數(shù)類型int和bigdecimal缝彬,另外一種都可以算成近似值數(shù)字,具體分類可以查看官方文檔哺眯。
mysql中關(guān)于精確值和近似值的定義

分清楚參數(shù)類型后谷浅,如果是精確值,那么系統(tǒng)的操作就是我們通常理解的四舍五入了奶卓。

mysql文檔中關(guān)于舍入的說明
如果是近似值的話按照以下四舍六入五成雙規(guī)則處理

  1. 被修約的數(shù)字小于5時一疯,該數(shù)字舍去;


    4小于5寝杖,被舍去
  2. 被修約的數(shù)字大于5時违施,則進位;

6大于5瑟幕,則進一位
  1. 被修約的數(shù)字等于5時,要看5前面的數(shù)字留潦,若是奇數(shù)則進位只盹,若是偶數(shù)則將5舍掉,


    5前面是奇數(shù)兔院,進一位
5前面是偶數(shù)殖卑,則舍去

若5的后面還有不為“0”的任何數(shù),則此時無論5的前面是奇數(shù)還是偶數(shù)坊萝,均應(yīng)進位孵稽。

因為5后面有值,全部進一位

因為5后面有值十偶,全部進一位

此處參考了以下網(wǎng)友資料
https://q.cnblogs.com/q/94377/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菩鲜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惦积,更是在濱河造成了極大的恐慌接校,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狮崩,死亡現(xiàn)場離奇詭異蛛勉,居然都是意外死亡,警方通過查閱死者的電腦和手機睦柴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門诽凌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坦敌,你說我怎么就攤上這事侣诵≌猩玻” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵窝趣,是天一觀的道長疯暑。 經(jīng)常有香客問我,道長哑舒,這世上最難降的妖魔是什么妇拯? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮洗鸵,結(jié)果婚禮上越锈,老公的妹妹穿的比我還像新娘。我一直安慰自己膘滨,他們只是感情好甘凭,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著火邓,像睡著了一般丹弱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铲咨,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天躲胳,我揣著相機與錄音,去河邊找鬼纤勒。 笑死坯苹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的摇天。 我是一名探鬼主播粹湃,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泉坐!你這毒婦竟也來了为鳄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坚冀,失蹤者是張志新(化名)和其女友劉穎济赎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體记某,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡司训,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了液南。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壳猜。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滑凉,靈堂內(nèi)的尸體忽然破棺而出统扳,到底是詐尸還是另有隱情喘帚,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布咒钟,位于F島的核電站吹由,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏朱嘴。R本人自食惡果不足惜倾鲫,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萍嬉。 院中可真熱鬧乌昔,春花似錦、人聲如沸壤追。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽行冰。三九已至溺蕉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間资柔,已是汗流浹背焙贷。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贿堰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓啡彬,卻偏偏與公主長得像羹与,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子庶灿,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容