DB2 CAST()函數,(CAST AS DECIMAL)


最近使用DB2查詢金額的時候出現了一個精度問題:

原sql:

數據庫中金額單位是分,取出來變成元

select CAST(FEE AS DECIMAL(10,2))/100 as fee from NET.XXX_TABLE;

查詢結果:

 

 是不是嚇了一跳!

這里又涉及到DECIMAL函數了

DECIMAL(10,2)是什么意思呢?

2-表示小數部分的位數,如果插入的值未指定小數部分或者小數部分不足兩位則會自動補到2位小數,若插入的值小數部分超過了2為則會發生截斷,截取前2位小數。

10-指的是整數部分加小數部分的總長度,也即插入的數字整數部分不能超過“10-2”位,否則不能成功插入,會報超出范圍的錯誤。

分析過程:

以第一條數據310為例,310先保留2位小數變成了310.00,310.00/100=3.1000,至於為什么結果有好多0還沒搞明白!(歡迎大家指出)

修改sql:

那就先做除法在保留2位小數

select CAST(FEE/100 AS DECIMAL(10,2)) as fee from NET.XXX_TABLE;

結果:

 

 這個時候精度丟了,第一條應該是3.10才對。

再次分析:

這個很容易被忽略:FEE=310,FEE/100這個除法 如果能整除那是沒問題的,一旦不能整除,得到的結果只是商,小數部分會被截斷,所以就成了3.00

再次修改sql:

那就先將310變成浮點型在做除法然后保留2位小數

select CAST((FEE*1.0)/100 AS DECIMAL(10,2)) as fee from NET.XXX_TABLE;

或者

select CAST(FEE/100.0 AS DECIMAL(10,2)) as fee from NET.XXX_TABLE;

結果:

 

 哎,里面有好多容易被忽略的坑啊。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM