概述
“四舍五入”是我們最早接觸的數(shù)學概念之一,數(shù)字取整也是我們最常接觸的一種需求樣式。在財務相關系統(tǒng)中,四舍五入的算法有時候?qū)ο到y(tǒng)用戶造成巨大的影響。
在Oracle SQL中,提供了四種數(shù)字取整函數(shù)。從名稱上,他們都是在取整,但是具體算法有所不同。
1、環(huán)境介紹和準備這里選擇Oracle 11gR2版本進行測試。
SQL> lect * from v$version;
不同種類數(shù)據(jù)進行測試。
SQL> lect * from t;2、四種基本取整函數(shù)
Oracle中的四種有取證功能函數(shù)為:ceil、floor、trunc和round,每一個都有不同的含義和特點,適合不同的場景。
2.1、ceil
Ceil的原始含義是說:返回比當前值大的第一個整數(shù)。這里要注意“大”的概念,最簡單的理解就是我們數(shù)學上的數(shù)軸。Ceil就是返回當前值在數(shù)軸往右第一個整數(shù)值。
SQL> lect id, ceil(id) from t;
這里主要注意負數(shù)的ceil結(jié)果,和我們直觀的想法有一些差異。而且ceil并沒有進行四舍五入。
2.2、floor
Floor與ceil相對應,應該說是正好相反。ceil取定數(shù)軸右側(cè)的第一個整數(shù)值。而Floor取定的是數(shù)軸左側(cè)的第一個整數(shù)值,也就是取小的動作。
SQL> lect id, floor(id) from t;
floor作用是找比當前值小的整數(shù)。
2.3、trunc
trunc是一個“多功能”函數(shù)。我們已經(jīng)習慣其對date日期類型的處理方式。trunc輸入?yún)?shù)是日期類型時,起到的是裁斷天之后的時分秒信息。全部如期轉(zhuǎn)為00:00:00。但trunc面對數(shù)字類型輸入的時候,也會將小數(shù)點后面的數(shù)字截取。
SQL> lect id, trunc(id) from t;
trunc對數(shù)字也沒有“四舍五入”的概念,都是直接“截斷處理”。
2.4、round
嚴格的說,只有round才算真正有“四舍五入”的選擇動作。
SQL> lect id, round(id) from t;
只有round才有我們通常意義的四舍五入動作。
3、取整函數(shù)的精度scale取值這些取整函數(shù),一些可以帶一個可選參數(shù),用來表示設置精度。當前我們數(shù)據(jù)為狀態(tài)如下:
SQL> lect * from t;
trunc和round是可以支持函數(shù)scale參數(shù)的。
SQL> lect id, trunc(id,1), round(id,1) from t;
如果設置正數(shù),那么返回的小數(shù)點后面的位數(shù)進行處理。如果我們設置負數(shù)呢?
SQL> lect id, trunc(id,-1), round(id,-1) from t;
如果設置負數(shù),就在小數(shù)點前面進行截取操作。
4、mod與remaindermod取余數(shù),我們經(jīng)常用的“模”操作就是基于mod的操作。而remainder的功能也是取余數(shù),兩者有什么差別呢?
SQL> lect mod(11,4), remainder(11,4) from dual;SQL> lect mod(0,4), remainder(0,4) from dual;SQL> lect mod(-11,4), remainder(-11,4) from dual;
當取余操作的兩個參數(shù)都是整數(shù)的時候,我們基本看出什么問題。但是一旦出現(xiàn)負數(shù),無論是除數(shù)還是被除數(shù),mod的行為和經(jīng)典余數(shù)模型有一些不同。
SQL> lect mod(-11,-4), remainder(-11,-4) from dual;SQL> lect mod(11,-4), remainder(11,-4) from dual;
精確的說,mod的函數(shù)取值為:n2-n1*floor(n2/n1)。所以,要注意在存在負數(shù)的時候,mod的問題。
remainder也有取余的效果,那么有什么不同的?要點就在計算公式的floor上面。對remainder而言,Oracle沒有選擇floor,而是round四舍五入。
總結(jié)Oracle提供了很多自定義函數(shù),用好他們、用對他們,可以給予我們很大幫助。
后面會分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關注一下~
本文發(fā)布于:2023-02-28 21:08:00,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1677729430104552.html
版權聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權益請與我們聯(lián)系,我們將在24小時內(nèi)刪除。
本文word下載地址:ORACLEROUND(oracle round函數(shù)保留2位小數(shù)).doc
本文 PDF 下載地址:ORACLEROUND(oracle round函數(shù)保留2位小數(shù)).pdf
| 留言與評論(共有 0 條評論) |