婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Mysql 乘法除法精度不一致問題(除法后四位小數)

Mysql 乘法除法精度不一致問題(除法后四位小數)

熱門標簽:機器人打電銷電話 上海市三維地圖標注 博樂電銷機器人 云南大數據外呼系統(tǒng) 400電話到哪辦理優(yōu)惠 南寧外呼系統(tǒng)招商 怎么更改高德地圖標注 電話機器人是電腦呼號嗎 鄭州網絡外呼系統(tǒng)價錢

問題

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

select total_fee / 100 from orders

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

測試

測試bug和未知情況,我們一定要 最小復現,精簡測試 ,防止其他語句對結果產生干擾。

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

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

所以初步得知 Mysql中,乘法和除法對小數點后的精度不一致

在國內的論壇中沒有找到合適的資料,于是到國外論壇尋找,提問,交流。

答案

首先感謝其他前輩對問題的解答和指點,我們也將盡量詳細地記錄問題的排查。

文明之所以能延續(xù),是因為它們有記憶。希望文章也能幫到更多的朋友。

  • 除法的精度默認是小數點后4位
  • 乘法的精度使用 操作數的精度和 的方式來判斷,如例子中的 1*0.01 精度分別是小數點后0位和2位,那么就是 0+2 =2 結果也將使用2位精度

測試

select 1.00 * 0.01;
// 結果 0.0100

符合上訴結論。感謝國外前輩指教。

除法使用2位精度

那么我們的問題 如果是要堅持用除法解決,我們可以使用函數來進行轉換精度,

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

DECIMAL的參數可以百度看這個,基本創(chuàng)建過表結構的都能明白。

@x和@y就是除數和被除數。

同時我還提出疑問,是否能在mysql里設置默認除法精度,我們就可以不用每次sql都使用函數計算了。

前輩回復:如果你不想有時候出現出乎意料的情況,那么需要每次都強制使用類型轉換。

mysql相關說明文獻

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ī)則

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

set div_precision_increment = 2;
// 再運行select 1 / 100; 得到 0.01 符合想要的結果

所以我們還可以通過修改默認變量,來改變除法的默認精度。

此時我們再測試

select 1.0 / 100;
// 結果 0.010 符合上文所述結論

總結

到此這篇關于Mysql 乘法除法精度不一致,除法后四位小數的文章就介紹到這了,更多相關mysql 乘法除法精度內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 一起因MySQL時間戳精度引發(fā)的血案分析

標簽:白銀 寧夏 恩施 澳門 益陽 秦皇島 杭州 定西

巨人網絡通訊聲明:本文標題《Mysql 乘法除法精度不一致問題(除法后四位小數)》,本文關鍵詞  Mysql,乘法,除法,精度,不一致,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mysql 乘法除法精度不一致問題(除法后四位小數)》相關的同類信息!
  • 本頁收集關于Mysql 乘法除法精度不一致問題(除法后四位小數)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 梧州市| 宁城县| 科技| 德阳市| 乳源| 临澧县| 绥德县| 宁明县| 绵阳市| 四会市| 额济纳旗| 邻水| 郓城县| 久治县| 镇康县| 左权县| 铅山县| 龙江县| 武义县| 通道| 聂荣县| 太仓市| 苏尼特右旗| 手机| 屯留县| 五寨县| 赤峰市| 麻江县| 阿荣旗| 宁陵县| 长治市| 南宫市| 普安县| 海兴县| 汉源县| 延安市| 金门县| 西畴县| 松滋市| 治多县| 株洲市|