久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Mysql 乘法除法精度不一致問(wèn)題(除法后四位小數(shù))

瀏覽:7日期:2023-10-16 10:32:20

問(wèn)題

今天在寫項(xiàng)目功能的時(shí)候,有一個(gè)統(tǒng)計(jì)金額的情況,然后需要進(jìn)行單位轉(zhuǎn)換,所以寫下了大概如下功能的語(yǔ)句,但得到的數(shù)據(jù)為小數(shù)點(diǎn)后4位精度,正常我們只需要2位就足夠。

select total_fee / 100 from orders

繼續(xù)排查尋找資料,進(jìn)行精度轉(zhuǎn)換,找了一圈的資料都不太滿意,繼續(xù)進(jìn)行測(cè)試

測(cè)試

測(cè)試bug和未知情況,我們一定要 最小復(fù)現(xiàn),精簡(jiǎn)測(cè)試 ,防止其他語(yǔ)句對(duì)結(jié)果產(chǎn)生干擾。

select 1 / 100;// 得到 0.0100select 1 * 0.01;// 得到 0.01

并且在3/4臺(tái)設(shè)備上運(yùn)行,不同mysql版本環(huán)境都是這樣子的結(jié)果。

所以初步得知 Mysql中,乘法和除法對(duì)小數(shù)點(diǎn)后的精度不一致

在國(guó)內(nèi)的論壇中沒(méi)有找到合適的資料,于是到國(guó)外論壇尋找,提問(wèn),交流。

答案

首先感謝其他前輩對(duì)問(wèn)題的解答和指點(diǎn),我們也將盡量詳細(xì)地記錄問(wèn)題的排查。

文明之所以能延續(xù),是因?yàn)樗鼈冇杏洃洝OM恼乱材軒偷礁嗟呐笥选?/p> 除法的精度默認(rèn)是小數(shù)點(diǎn)后4位 乘法的精度使用 操作數(shù)的精度和 的方式來(lái)判斷,如例子中的 1*0.01 精度分別是小數(shù)點(diǎn)后0位和2位,那么就是 0+2 =2 結(jié)果也將使用2位精度

測(cè)試

select 1.00 * 0.01;// 結(jié)果 0.0100

符合上訴結(jié)論。感謝國(guó)外前輩指教。

除法使用2位精度

那么我們的問(wèn)題 如果是要堅(jiān)持用除法解決,我們可以使用函數(shù)來(lái)進(jìn)行轉(zhuǎn)換精度,

CAST( @x / @y AS DECIMAL(m,n) )

DECIMAL的參數(shù)可以百度看這個(gè),基本創(chuàng)建過(guò)表結(jié)構(gòu)的都能明白。

@x和@y就是除數(shù)和被除數(shù)。

同時(shí)我還提出疑問(wèn),是否能在mysql里設(shè)置默認(rèn)除法精度,我們就可以不用每次sql都使用函數(shù)計(jì)算了。

前輩回復(fù):如果你不想有時(shí)候出現(xiàn)出乎意料的情況,那么需要每次都強(qiáng)制使用類型轉(zhuǎn)換。

mysql相關(guān)說(shuō)明文獻(xiàn)

https://dev.mysql.com/doc/refman/8.0/en/arithmetic-functions.html

In division performed with /, the scale of the result when using two exact-value operands is the scale of the first operand plus the value of the div_precision_increment system variable (which is 4 by default). For example, the result of the expression 5.05 / 0.014 has a scale of six decimal places (360.714286).

除法的精度規(guī)則

由上面引用的文獻(xiàn)可知:當(dāng)使用兩個(gè)數(shù)值進(jìn)行計(jì)算時(shí),結(jié)果的精度由 第一個(gè)操作數(shù)的精度 + 系統(tǒng)變量div_precision_increment的值決定 ,如我們例子中的1 精度是0,系統(tǒng)變量精度是4位默認(rèn),所以得到的結(jié)果是4位精度

set div_precision_increment = 2;// 再運(yùn)行select 1 / 100; 得到 0.01 符合想要的結(jié)果

所以我們還可以通過(guò)修改默認(rèn)變量,來(lái)改變除法的默認(rèn)精度。

此時(shí)我們?cè)贉y(cè)試

select 1.0 / 100;// 結(jié)果 0.010 符合上文所述結(jié)論

總結(jié)

到此這篇關(guān)于Mysql 乘法除法精度不一致,除法后四位小數(shù)的文章就介紹到這了,更多相關(guān)mysql 乘法除法精度內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品久久久久久一区二区 | 国产日韩一区 | 少妇黄色| 日本久久艹 | 日日爱视频| 中文字幕色 | 亚洲中字在线 | 国产精品爱久久久久久久 | 日本久久精品视频 | 亚洲成人免费在线观看 | 91麻豆精品国产91久久久资源速度 | 国产精品毛片一区二区三区 | 国产偷录视频叫床高潮对白 | 欧美精品一区二 | 国产精品99久久久久久久久久久久 | 久久国产精品一区二区三区 | 成人激情视频在线观看 | 美女三区 | 成人av在线播放 | 日韩国产 | 欧美久热 | 一区二区免费 | 91色爱| 麻豆久久久9性大片 | 国产精品亚洲成人 | 亚洲国产成人av | 国产欧美高清在线观看 | 国产成人一级片 | 久久久久久久久久一区二区 | 99久久国产| 午夜精品久久久久久久星辰影院 | 国产精品成人久久久久 | 国产精品久久久久久久久久 | 一区视频在线 | 999在线观看视频 | 日韩av高清在线 | 成人免费一区二区三区视频网站 | 日本天堂在线播放 | 影音先锋在线看片资源 | 亚洲精品视频在线免费播放 | 国产综合精品 |