oracle中數字保留幾位小數的問題


需求:
#將數字填充到對應金額單中 select substr(b.payMoney,length(b.payMoney),
1) 分, substr(b.payMoney,length(b.payMoney)-1,1) 角, case when length(b.payMoney)-3 <=0 then '' else substr(b.payMoney,length(b.payMoney)-3,1) end 圓, case when length(b.payMoney)-4 <=0 then '' else substr(b.payMoney,length(b.payMoney)-4,1) end 拾, case when length(b.payMoney)-5 <=0 then '' else substr(b.payMoney,length(b.payMoney)-5,1) end 百, case when length(b.payMoney)-6 <=0 then '' else substr(b.payMoney,length(b.payMoney)-6,1) end 千, case when length(b.payMoney)-7 <=0 then '' else substr(b.payMoney,length(b.payMoney)-7,1) end 萬, case when length(b.payMoney)-8 <=0 then '' else substr(b.payMoney,length(b.payMoney)-8,1) end 十萬, case when length(b.payMoney)-9 <=0 then '' else substr(b.payMoney,length(b.payMoney)-9,1) end 百萬, case when length(b.payMoney)-10 <=0 then '' e end 億 from dual; lse substr(b.payMoney,length(b.payMoney)-10,1) end 千萬, case when length(b.payMoney)-11 <=0 then '' else substr(b.payMoney,length(b.payMoney)-11,1)

單據的樣式如下:

左邊是根據右邊的數字進行變換為對應的金額大寫,在上面的sql中我是用的是length(b.payMoney)獲取的數字長度,其中b.payMoney就是數據庫中查詢出來的一個數字,

這個sql最致命的問題就是如果最終查詢出來的數字是一個整數,即使我是用round/ceil/floor等保留小數的方式,最終得到的長度都不是想要的數據,默認將小數點后面的00去掉了

解決方案:

將其轉換成to_char(b.payMoney,'999999999.99');這樣寫前面的九個9表示小數點前面可以最多九位,小數點后的兩個9表示的是保留兩位,使用這個查詢出來的數據length()這個函數最終就沒有問題

 


免責聲明!

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



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