oracle to_char补0,to_char格式化number导致小数点前0丢失的问题

对于正常的,可以很容易的转过来:

select to_char(1.2334) from dual;

TO_CHAR(1.2334)

---------------

1.2334

但是下面的就不是我们想要的结果了:

select to_char(0.2334) from dual;

TO_CHAR(0.2334)

---------------

.2334

select to_char(1.00) from dual;

TO_CHAR(1.00)

-------------

1

那么如何处理呢?

使用格式化参数,如990.0099,这样就能使后面有四位小数了,第5位会进行4舍5入。

select to_char(0.23346,990.0099) from dual;

TO_CHAR(0.23346,990.0099)

-------------------------

0.2335

select to_char(1,990.0099) from dual;

TO_CHAR(1,990.0099)

-------------------

1.0000

但是这样还是有问题,大家可以看到前面是有空格的。而且如果位数不够会显示####这样的信息,如:

select to_char(1000.3,990.0099) from dual;

TO_CHAR(1000.3,990.0099)

------------------------

#########

那么如何处理这样的前面有空格,还不能显示的呢?这就需要把格式的数字长度设置为足够大可以处理正常的信息。

select to_char(1000.3,999999999990.0099) from dual;

TO_CHAR(1000.3,999999999990.00

------------------------------

1000.3000

select to_char(1000.3,'FM999999999990.0099') from dual;

TO_CHAR(1000.3,'FM999999999990

------------------------------

1000.30

FM的作用是去掉前面的空格,因为后面的长度决定了格式化后显示的长度,如果前面数字长度不够会用空格进行补位,这样把空格去掉才是我们要的结果。

也可以这样去掉前面的空格:

select ltrim(to_char(1000.3,'999999999990.0099')) from dual;

LTRIM(TO_CHAR(1000.3,'99999999

------------------------------

1000.3000

0与9的区别:

9是会进位的,而0就是有就显示数没有就补0!

select to_char(1000.3,'FM999999999990.0099') from dual;

TO_CHAR(1000.3,'FM

------------------

1000.30

select to_char(1000.3,'FM999990.9990') col01 from dual;

COL01

------------

1000.3000

to_char的其他用法:

select to_char(1222,'0,000.0000') from dual;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值