問題描述
oracle如果存儲number(20,2)數據,0數據庫中爲0.00,2.1數據庫中爲2.10,3.88存儲爲3.88,
如果直接從數據庫中取出對應顯示爲:
0 2.1 3.88 保留兩位小數會發生變化,如果需要和數據庫保持一致:
解決方法
保留兩位有效小數的方法:
SELECT TO_CHAR(3.2,'FM99999999999990D00') FROM DUAL
參考實例:
-- 數字轉字符串格式
select
to_char(a, 'FM9990.00')"FM9990D00",
to_char(a, '99D90')"99D90",
to_char(a, 'FM90D99')"FM90D99",
rtrim(to_char(a, 'FM999990D99'), to_char(0, 'D'))"FM999990D99"
from (
select 50 a from dual
union all select 50.57 from dual
union all select 5.57 from dual
union all select 0.35 from dual
union all select 0.4 from dual
)
FM9990D00 99D90 FM90D99 FM999990D99
1 50.00 50.00 50. 50
2 50.57 50.57 50.57 50.57
3 5.57 5.57 5.57 5.57
4 0.35 .35 0.35 0.35
5 0.40 .40 0.4 0.4
分析
- 【FM9990.00】格式,皆滿足;代碼更簡潔;與【rtrim(to_char(a, 'FM999990D99'), to_char(0, 'D'))"FM999990D99"】的區別整數是否保留小數。
- 【99D90】格式,問題:小數位小於1,0則不顯示。
- 【FM90D99】格式,問題:小數位爲0,則不顯示。
- 【rtrim(to_char(a, 'FM999990D99'), to_char(0, 'D'))"FM999990D99"】格式,缺點:代碼過於複雜化。
知悉
-
RTRIM(c1,[,c2]) 【功能】刪除右邊出現的字符串 【參數】C1 字符串 c2 追加字符串,默認爲空格 【返回】字符型 【示例】 SQL> select RTRIM('gao qian jingXXXX','X') text from dual; text ----------------- gao qian jing 【相似】LTRIM()刪除左邊出現的字符串 【相反】RPAD() 在列的右邊粘貼字符
- 【0】在對應位置返回對應的字符,如果沒有則以'0'填充. to_char(0.34,'9,9,9,0.0.34';to_char(1234,'9999.00')='1234.00'; 注意事項:這是一個強制的符號,對應位沒有,則以'o'填充,這是9很大不同地方 。
- 【9】在小數位,則表示轉換爲對應字符,如果沒有則以0表示;在整數位,沒有對應則不填充字符. to_char(123,'999.99')=123.00; TO_CHAR(123,'99999.9')=123.0; 注意事項:對於0和9而言,如果格式的位數不如數字的位數多,會返回'#'. 譬如to_char(12345,'9999')='#####' 。
- 【D】(ISO 小數位符號) '999D99' 這是"點號"的國際版本(ISO),作用等同於點號,也是隻能出現一次.所不同的是,數據庫會根據NLS_NUMERIC_CHARACTER的參數值來設置內容.默認的這個值是點號。
- 【FM】代表:刪除如果是因9帶來的空格,則刪除之。