以下的文章主要是講述Oracle小數(shù)點的實際保留問題 如果你有相關(guān)的業(yè)務(wù)清單有提取要求的話 我們需要使用到百分率 通常的情況下 需要對其保留兩位小數(shù) 其實我們只用round就可以實現(xiàn)(round(_data ) ) 但是格式不是很工整
創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、冊亨網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、購物商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為冊亨等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
對格式要求不嚴(yán)謹(jǐn)?shù)那闆r下使用round即可 以下是網(wǎng)絡(luò)搜索到的處理方法
方法一 使用to_char的fm格式 即
to_char(round(data amount ) FM ) as amount
不足之處是 如果數(shù)值是 的話 會顯示為 而不是
另一需要注意的是 格式中Oracle小數(shù)點左邊 的個數(shù)要夠多 否則查詢的數(shù)字會顯示為n個符號 #
解決方式如下
select decode(salary (to_char(round(salary ) fm ))) from can_do;
方法二 使用case when then else end進(jìn)行各種情況的判斷處理
case
when instr(to_char(data amount) ) then
data amount ||
when instr(to_char(data amount) ) + = length(data amount) then
data amount ||
else
to_char(round(data amount ))
end as amount_format
方法三 可以使用Oracle自帶的參數(shù)設(shè)置 即
lumn amount format l
此方法的不足是 format中的Oracle小數(shù)點左面的 的個數(shù)要已知 否則會出現(xiàn)超過的數(shù)字顯示為########的情況
另外一個問題是 使用column時 設(shè)置生效是session級還是system級 需要注意
也許某張表的數(shù)值列不總是要求所有的地方顯示時 都是Oracle小數(shù)點后兩位的格式
此時只能使用session級 但是有個數(shù)據(jù)庫連接會話超時的問題 如果不是使用到system級 不建議使用該方法
方法四 使用to_char+trim的方式 如下
select trim(to_char( )) from dual;
或者
select ltrim(trim(to_char( )) ) from dual;
此處使用了 個 或者 個 的格式 建議使用 個 的方式 方便些 方法四的不足之處是
如果數(shù)值是 的話 轉(zhuǎn)化之后為 而不是 補救措施是 decode一下
另一需要注意的是 格式中Oracle小數(shù)點左邊 或者 的個數(shù)要夠多 負(fù)責(zé)查詢的數(shù)字會顯示為n個符號 #
如下
select decode
(salary trim(to_char(salary ))) from can_do;
或者
select decode
(salary ltrim(trim(to_char(salary )) )) from can_do;
結(jié)論 建議使用方法四中的trim+to_char的方式或者方法一的補救之后的方式 而且最好使用Oracle小數(shù)點左邊n個 的方式 不要使用 的方式 否則 要多一步trim處理
即
select decode(salary
trim(to_char(salary ))) from can_do;
或者
select decode(salary
(to_char(round(salary ) fm ))) from can_do;
lishixinzhi/Article/program/Oracle/201311/18607
數(shù)據(jù)類型定義一下,例如number(p.s)
數(shù)據(jù)的總位數(shù)是p
對s分2種情況:
1. s0
精確到小數(shù)點右邊s位,并四舍五入。然后檢驗有效數(shù)位是否=p;如果sp,小數(shù)點右邊至少有s-p個0填充。
2. s0
精確到小數(shù)點左邊s位,并四舍五入。然后檢驗有效數(shù)位是否=p+|s|
123.2564 NUMBER 123.2564
1234.9876 NUMBER(6,2) 1234.99
12345.12345 NUMBER(6,2) Error
1234.9876 NUMBER(6) 1235
12345.345 NUMBER(5,-2) 12300
1234567 NUMBER(5,-2) 1234600
12345678 NUMBER(5,-2) Error
123456789 NUMBER(5,-4) 123460000
1234567890 NUMBER(5,-4) Error
12345.58 NUMBER(*, 1) 12345.6
0.1 NUMBER(4,5) Error
0.01234567 NUMBER(4,5) 0.01235
0.09999 NUMBER(4,5) 0.09999
number(10,2)就是總共10位數(shù),并精確到小數(shù)點后兩位。希望對你有幫助。
oracle 關(guān)于數(shù)字存儲的主要有下面幾個:
NUMBER(P,S) 數(shù)字類型 P為整數(shù)位,S為小數(shù)位
DECIMAL(P,S) 數(shù)字類型 P為整數(shù)位,S為小數(shù)位
INTEGER 整數(shù)類型 小的整數(shù)
FLOAT 浮點數(shù)類型 NUMBER(38),雙精度
REAL 實數(shù)類型 NUMBER(63),精度更高
INTEGER是NUMBER的子類型,它等同于NUMBER(38,0),用來存儲整數(shù)。若插入、更新的數(shù)值有小數(shù),則會被四舍五入。
Oracle的數(shù)字類型有如下幾種:
1.NUMBER類型
NUMBER(P,S)是最常見的數(shù)字類型,可以存放數(shù)據(jù)范圍為10^130~10^126
P是長度,S是小數(shù)點位數(shù),S默認(rèn)為0,則為整數(shù)
2.INTEGER類型
INTEGER是NUMBER的子類型,它等同于NUMBER(38,0),用來存儲整數(shù)
3.BINARY_FLOAT
BINARY_FLOAT 是 32 位、 單精度浮點數(shù)字?jǐn)?shù)據(jù)類型
4.BINARY_DOUBLE
BINARY_DOUBLE 是為 64 位,雙精度浮點數(shù)字?jǐn)?shù)據(jù)類型
5.FLOAT類型
FLOAT類型也是NUMBER的子類型。
Float(n),數(shù) n 指示位的精度,可以存儲的值的數(shù)目。N 值的范圍可以從 1 到 126
還是number型。
參考以下定義:
number
(
precision,
scale)
precision表示數(shù)字中的有效位。如果沒有指定precision的話,oracle將使用38作為精度。
scale表示數(shù)字小數(shù)點右邊的位數(shù),scale默認(rèn)設(shè)置為0.
如果把scale設(shè)成負(fù)數(shù),oracle將把該數(shù)字取舍到小數(shù)點左邊的指定位數(shù)。