oracle怎么小数中多余的零,关于小数中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')||'<

'>>'||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/,如需转载,请注明出处,否则将追究法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值