ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于小数中0的处理

关于小数中0的处理

Linux操作系统 作者:瀚海小王子 时间:2014-09-21 13:41:15 0 删除 编辑
今天碰到一个小问题,分享一下。
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')||'<<' from dual;
'>>'||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博客 ” ,链接:https://blog.itpub.net/29900508/viewspace-1276037/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-09-21

  • 博文量
    219
  • 访问量
    175844