最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL對(duì)查詢的值四舍五入保留兩位小數(shù)的方法

 更新時(shí)間:2026年07月24日 16:23:52   作者:detayun  
開發(fā)財(cái)務(wù)、充值、消費(fèi)、余額相關(guān)業(yè)務(wù)時(shí),經(jīng)常遇到金額展示需求:數(shù)據(jù)庫原始小數(shù)位數(shù)較多,前端需要統(tǒng)一保留兩位小數(shù)展示,本文重點(diǎn)講解 ROUND() 函數(shù),介紹了MySQL如何對(duì)查詢的值四舍五入保留兩位小數(shù),需要的朋友可以參考下

前言

開發(fā)財(cái)務(wù)、充值、消費(fèi)、余額相關(guān)業(yè)務(wù)時(shí),經(jīng)常遇到金額展示需求:數(shù)據(jù)庫原始小數(shù)位數(shù)較多,前端需要統(tǒng)一保留兩位小數(shù)展示。
很多同學(xué)習(xí)慣把原始數(shù)值查詢出來,在 Python / Java 代碼里做四舍五入處理。
實(shí)際上 MySQL 原生提供數(shù)值函數(shù),可以直接在SQL層面完成四舍五入。

本文重點(diǎn)講解 ROUND() 函數(shù),區(qū)分容易混淆的 TRUNCATE()FORMAT(),同時(shí)梳理財(cái)務(wù)場(chǎng)景踩坑點(diǎn)、NULL空值兼容方案,給出現(xiàn)成可直接復(fù)制的業(yè)務(wù)模板。

一、核心函數(shù):ROUND() 四舍五入

語法

ROUND(數(shù)值, 保留小數(shù)位數(shù))
  • 規(guī)則:四舍五入
  • 返回類型:數(shù)值類型,可以繼續(xù)參與加減運(yùn)算

基礎(chǔ)示例

SELECT ROUND(123.456, 2);  -- 123.46
SELECT ROUND(123.454, 2);  -- 123.45
SELECT ROUND(100, 2);      -- 100.00

結(jié)合聚合函數(shù) SUM()(業(yè)務(wù)最常用)

統(tǒng)計(jì)充值、余額、消費(fèi)金額場(chǎng)景:

-- 當(dāng)日充值總額,求和后四舍五入保留2位
SELECT ROUND(SUM(money), 2) AS day_recharge
FROM sys_recharge_log
WHERE create_time >= CURDATE() AND create_time < CURDATE() + INTERVAL 1 DAY;

二、重要配套:兼容NULL空值 IFNULL

一個(gè)高頻坑:當(dāng)查詢沒有匹配數(shù)據(jù)時(shí),SUM() 結(jié)果為 NULLROUND(NULL,2) 依舊返回NULL。
程序如果直接使用會(huì)出現(xiàn)空值報(bào)錯(cuò)。
解決方案:IFNULL() 兜底,不存在數(shù)據(jù)時(shí)返回 0.00。

標(biāo)準(zhǔn)生產(chǎn)寫法:

SELECT IFNULL(ROUND(SUM(money), 2), 0.00) AS day_recharge
FROM sys_recharge_log
WHERE create_time >= CURDATE() AND create_time < CURDATE() + INTERVAL 1 DAY;

邏輯說明:

  1. 先執(zhí)行 SUM 求和
  2. 求和結(jié)果傳入ROUND四舍五入
  3. 如果整體結(jié)果為NULL,替換為 0.00

三、容易混淆的兩個(gè)函數(shù),不要用錯(cuò)

1. TRUNCATE() 直接截?cái)?,不四舍五?/h3>
SELECT TRUNCATE(123.459, 2); -- 123.45

適用場(chǎng)景:只想要舍棄后面小數(shù)、不進(jìn)位;財(cái)務(wù)金額統(tǒng)計(jì)嚴(yán)禁使用,會(huì)造成金額誤差。

2. FORMAT() 格式化(謹(jǐn)慎使用)

SELECT FORMAT(IFNULL(ROUND(SUM(money),2),0), 2);

特性:

  1. 自動(dòng)增加千分位逗號(hào) 1,234.56
  2. 返回字符串類型
    ??重大風(fēng)險(xiǎn):
    拿到結(jié)果后如果繼續(xù)做數(shù)值加減運(yùn)算,極易引發(fā)類型異常;
    只適合直接前端展示,不適合后續(xù)參與計(jì)算。

總結(jié)區(qū)分:
? 金額統(tǒng)計(jì)、后續(xù)還要運(yùn)算:ROUND + IFNULL
? 財(cái)務(wù)計(jì)算不要用 TRUNCATE
? 需要二次運(yùn)算不要使用 FORMAT

四、實(shí)戰(zhàn)多字段橫向匯總場(chǎng)景

儀表盤統(tǒng)計(jì)多條金額指標(biāo),一次性統(tǒng)一處理小數(shù):

SELECT
    IFNULL(ROUND(SUM(CASE WHEN type=1 THEN money ELSE 0 END),2),0.00) AS money1,
    IFNULL(ROUND(SUM(CASE WHEN type=2 THEN money ELSE 0 END),2),0.00) AS money2,
    IFNULL(ROUND(SUM(price),2),0.00) AS consume
FROM sys_balance
WHERE expire_time >= NOW() AND status = 1 AND user_id = 'xxx';

五、兩種實(shí)現(xiàn)方案對(duì)比:SQL處理 VS 應(yīng)用代碼處理

方案A:SQL內(nèi)部 ROUND 處理(推薦)

優(yōu)點(diǎn):

  1. 統(tǒng)一規(guī)則,前后端不需要重復(fù)維護(hù)保留小數(shù)邏輯;
  2. 減少應(yīng)用層判空、類型轉(zhuǎn)換代碼;
  3. 多條統(tǒng)計(jì)匯總時(shí)代碼更簡(jiǎn)潔。

缺點(diǎn):
復(fù)雜計(jì)算邏輯全部壓在數(shù)據(jù)庫,極端大量并發(fā)場(chǎng)景需要評(píng)估壓力。

方案B:原始數(shù)值查出,Python/Java代碼四舍五入

優(yōu)點(diǎn):靈活,可以針對(duì)不同場(chǎng)景切換保留位數(shù);
缺點(diǎn):

  1. 每個(gè)接口都要重復(fù)寫格式化邏輯,容易漏寫;
  2. 多人開發(fā)容易出現(xiàn)標(biāo)準(zhǔn)不統(tǒng)一,有的四舍五入、有的直接截?cái)唷?/li>

建議規(guī)范:?jiǎn)渭冋故绢悎?bào)表、后臺(tái)統(tǒng)計(jì)頁面,優(yōu)先SQL層統(tǒng)一ROUND。

六、高頻開發(fā)踩坑清單

坑1:函數(shù)順序?qū)懛?/h3>

? 錯(cuò)誤寫法

ROUND(IFNULL(SUM(money),0.00), 2)

邏輯沒問題,但推薦下面可讀性更強(qiáng)順序;

? 推薦順序

IFNULL(ROUND(SUM(money), 2), 0.00)

坑2:忘記處理NULL,程序拿到None

沒有業(yè)務(wù)數(shù)據(jù)時(shí) SUM 返回 NULL,前端展示出現(xiàn)空白。務(wù)必搭配 IFNULL。

坑3:使用FORMAT接收后繼續(xù)運(yùn)算

# 危險(xiǎn)!FORMAT返回帶逗號(hào)的字符串,轉(zhuǎn)float報(bào)錯(cuò)
row['day_recharge'] = "1,200.50"
float(row['day_recharge']) # 轉(zhuǎn)換異常

坑4:金額字段使用float存儲(chǔ)

浮點(diǎn)類型本身存在精度丟失,最佳實(shí)踐:金額使用 DECIMAL(18,2) 存儲(chǔ),從根源避免精度問題。

七、編碼規(guī)范模板(直接復(fù)制使用)

單條金額統(tǒng)計(jì)標(biāo)準(zhǔn)模板

SELECT IFNULL(ROUND(SUM(money), 2), 0.00) AS num
FROM sys_recharge_log
WHERE create_time >= CURDATE() AND create_time < CURDATE() + INTERVAL 1 DAY
AND type = 1;

分組統(tǒng)計(jì)場(chǎng)景

SELECT
    type,
    IFNULL(ROUND(SUM(money), 2), 0.00) AS total_money
FROM sys_balance
WHERE status = 1
GROUP BY type;

八、全文總結(jié)

  1. 四舍五入優(yōu)先使用 ROUND(數(shù)值,2),返回?cái)?shù)值,支持后續(xù)運(yùn)算;
  2. 無匹配數(shù)據(jù)會(huì)產(chǎn)生NULL,固定搭配 IFNULL(...,0.00) 兜底;
  3. TRUNCATE 截?cái)嗖贿M(jìn)位,財(cái)務(wù)業(yè)務(wù)禁止隨意使用;
  4. FORMAT生成帶千分位字符串,僅用于直接展示,不要參與數(shù)值計(jì)算;
  5. 報(bào)表類金額統(tǒng)計(jì)建議在SQL層統(tǒng)一處理小數(shù)規(guī)則,避免應(yīng)用代碼各處重復(fù)格式化;
  6. 存儲(chǔ)金額盡量使用 DECIMAL 類型,規(guī)避浮點(diǎn)數(shù)精度丟失隱患。

財(cái)務(wù)數(shù)據(jù)對(duì)精度敏感,統(tǒng)一SQL層使用ROUND規(guī)范處理,能極大減少前后端因小數(shù)保留規(guī)則不一致產(chǎn)生的對(duì)賬問題。

以上就是MySQL對(duì)查詢的值四舍五入保留兩位小數(shù)的方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL查詢值保留兩位小數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql之臟讀、不可重復(fù)讀、幻讀的區(qū)別及說明

    mysql之臟讀、不可重復(fù)讀、幻讀的區(qū)別及說明

    這篇文章主要介紹了mysql之臟讀、不可重復(fù)讀、幻讀的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 忘記Mysql密碼的解決辦法小結(jié)

    忘記Mysql密碼的解決辦法小結(jié)

    最近老是忘記mysql密碼。網(wǎng)上學(xué)習(xí)了四種解決辦法,記錄下來。分享給大家
    2014-07-07
  • MySQL如何比較兩個(gè)表數(shù)據(jù)的差異

    MySQL如何比較兩個(gè)表數(shù)據(jù)的差異

    這篇文章主要介紹了MySQL比較兩個(gè)表數(shù)據(jù)的差異,這些方式可以根據(jù)具體需求和數(shù)據(jù)結(jié)構(gòu)選擇合適的方法來比較兩個(gè)表的數(shù)據(jù)差異,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • mysql給一張表添加外鍵的4種方法

    mysql給一張表添加外鍵的4種方法

    這篇文章主要給大家介紹了關(guān)于mysql給一張表添加外鍵的4種方法,MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它支持外鍵約束以保證數(shù)據(jù)庫的數(shù)據(jù)完整性,需要的朋友可以參考下
    2023-08-08
  • lnmp重置mysql數(shù)據(jù)庫root密碼的兩種方法

    lnmp重置mysql數(shù)據(jù)庫root密碼的兩種方法

    這篇文章給大家介紹了lnmp重置mysql數(shù)據(jù)庫root密碼的兩種方法,第一種方法通過腳本重置密碼,第二種方法通過命令修改,具體操作方法大家參考下本文
    2017-07-07
  • Mysql中分布式鎖的具體實(shí)現(xiàn)

    Mysql中分布式鎖的具體實(shí)現(xiàn)

    分布式鎖開發(fā)中經(jīng)常使用,本文主要介紹了Mysql中分布式鎖的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • MySQL索引使用說明(單列索引和多列索引)

    MySQL索引使用說明(單列索引和多列索引)

    這篇文章主要討論MySQL選擇索引時(shí)單列單列索引和多列索引使用,以及多列索引的最左前綴原則,需要的朋友可以參考下
    2018-01-01
  • MySQL用戶賬戶管理和權(quán)限管理深入講解

    MySQL用戶賬戶管理和權(quán)限管理深入講解

    這篇文章主要給大家介紹了關(guān)于MySQL用戶賬戶管理和權(quán)限管理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Mysql TIMESTAMPDIFF函數(shù)示例詳解

    Mysql TIMESTAMPDIFF函數(shù)示例詳解

    這篇文章主要介紹了Mysql TIMESTAMPDIFF函數(shù)示例詳解,TIMESTAMPDIFF函數(shù)返回datetime_expr2 - datetime_expr1的結(jié)果,其中datetime_expr1和datetime_expr2可以是DATE或DATETIME類型值,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2023-03-03
  • MySQL與PHP的基礎(chǔ)與應(yīng)用專題之內(nèi)置函數(shù)

    MySQL與PHP的基礎(chǔ)與應(yīng)用專題之內(nèi)置函數(shù)

    MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎(chǔ)應(yīng)用,本篇MySQL的內(nèi)置函數(shù)開始
    2022-02-02

最新評(píng)論

疏附县| 景洪市| 大厂| 土默特右旗| 鄂托克旗| 长沙市| 镇坪县| 花莲市| 东城区| 亚东县| 旬邑县| 玉林市| 吴川市| 驻马店市| 万宁市| 元谋县| 上栗县| 卢氏县| 松溪县| 乡宁县| 霍州市| 永德县| 民县| 博野县| 毕节市| 宜昌市| 防城港市| 旌德县| 出国| 荔波县| 兴文县| 邵武市| 拜城县| 余姚市| 南岸区| 响水县| 吐鲁番市| 彭山县| 武胜县| 叙永县| 同江市|