關於小數中0的處理

jeanron100發表於2012-11-07
今天碰到一個小問題,分享一下。
oracle中輸入0.1查出的時候是.1,現在想把結果格式化成varchar2,格式化成0.10,保留兩位精度。
 
先拿大於1的數試驗,沒問題
SQL> select to_char(1.1,'99999999.99') from dual;
TO_CHAR(1.1,
------------
        1.10
SQL> c/1.1/.1
  1* select to_char(.1,'99999999.99') from dual
SQL> /
TO_CHAR(.1,'
------------
         .10
--結果有問題
 
--貌似可以用這種方式
 
SQL> select to_char(.1,'999999990.99') from dual;
TO_CHAR(.1,'9
-------------
         0.10
--或者
SQL> select to_char(.1,'fm9999999990.00') from dual;
TO_CHAR(.1,'FM
--------------
0.10
--這樣不可以
SQL> select to_char(.12,'fm999999.99') from dual;
TO_CHAR(.1
----------
.12
但是對於上面的兩種方法,仔細琢磨一下,會發現 差別還是很大的。
SQL> select to_char(.1,'999999990.99'),length(to_char(.1,'999999990.99')) from dual;
TO_CHAR(.1,'9 LENGTH(TO_CHAR(.1,'999999990.99'))
------------- ----------------------------------
         0.10                                 13
 
SQL> select to_char(.1,'fm9999999990.00') ,length(to_char(.1,'fm9999999990.00')) from dual;
TO_CHAR(.1,'FM LENGTH(TO_CHAR(.1,'FM9999999990.00'))
-------------- -------------------------------------
0.10                                               4
--用符合隔開來分辨。
SQL> select '>>'||TO_CHAR(123.1,'FM99999.99')||'<>'||TO_CHAR(123.1,'9999.99')||'<
'>>'||TO_CHAR '>>'||TO_CHA
------------- ------------
>>123.1<>  123.10<<
第二種會有隱式的分隔。
所以根據具體的需要還是要區別對待,
預設保險起見還是用如下的方式
SQL> select to_char(.1,'fm9999999990.00') ,length(to_char(.1,'fm9999999990.00')) from dual;
TO_CHAR(.1,'FM LENGTH(TO_CHAR(.1,'FM9999999990.00'))
-------------- -------------------------------------
0.10                                               4
這樣就可以自動去除前面的空格。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-748568/,如需轉載,請註明出處,否則將追究法律責任。

相關文章