最新消息:

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

SQL 观测者 3079浏览

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

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;

转载请注明:观测者 » to_char格式化number导致小数点前0丢失的问题