1. 程式人生 > >Oracle欄位保留2兩位小數點number型別

Oracle欄位保留2兩位小數點number型別

*問題背景*:昨天調阿里發票平臺的申請發票介面時發生了一個異常,原因是發票金額至少保留兩位小數,我查了下記錄,確實表中的記錄為600,所以查出來的資料不會帶小數點。

由於用的oracle,我查了下欄位是否能像mysql一樣設定保留小數點呢。查了網上很多文章,發現實現得很麻煩,就是用number型別進行實現,用起來比較繞,下面對number型別做下簡單的介紹
number ( precision, scale):
1. precision(精度),是總有效資料位數,取值範圍是38,預設是38,可以用字元*表示38
2. scale(刻度),是小數點位數,取值範圍是-84~127
3. 欄位型別可以設定成 number、number(8),number(5,2)等,由於重點要介紹如何儲存小數點後兩位,就略過前兩位的介紹了。如果將欄位型別設定成number(5,2),就表示小數點左邊最多有3位有效數字,右邊最多有2位有效數字,加起來就是最多有5位有效數字,超過這個範圍的數字就不能正確的儲存下來

下面我們進行試驗下:
表結構
這裡寫圖片描述

資料庫操作
試驗

總結:
1、P-S為該欄位允許插入的最大整數位,超過則會錯誤
2、S 為你要儲存此欄位的小數點位,如果插入的小數位大於S,插入不會報錯,小數則會進行四捨五入

由於P最大為38長度,然後我專案中也單價要儲存兩位小數點, 我就選擇了比較極限的做法,我也不知道單價會有多長,就設定成number(38,2)

不過還是太年輕了,如果你要更改欄位型別,oracley要求表要清空資料。所以更改欄位型別我只好不能採用了。

最終我採用了在java中設定資料的精度,強行設定成保留兩位小數點,只能說oracle真坑爹!下次建新的表時,如果有需要儲存兩位小數點的,就注意下,提前設定number的 P和S