Oracle 如何保留两位小数 如0.00

Oracle 如何保留两位小数 如0.00

通常我们可以使用如下的方法来实现

select round('1.226',2) as aa from dual
select trunc('1.226',2) as aa from dual

这样分别会显示处  1.23和1.22

但是如果是如下的语句

select round(0.2,2) as aa from dual
select trunc(0.2,2) as aa from dual

你会发现结果是0.2和0.2

并不能满足我们的要求,并且某些时候打印的结果还可能是 .2 和 .2

后面我想到是否可以用to_char函数去实现,于是就有了下面的语句

select decode(ceil(0.899),'1','0'||trim(to_char(0.899,'999999999999999.99')),'0','0'||trim(to_char(0.899,'999999999999999.99')),trim(to_char(0.899,'999999999999999.99'))) as aa from dual 
union
select decode(ceil(0),'1','0'||trim(to_char(0,'999999999999999.99')),'0','0'||trim(to_char(0,'999999999999999.99')),trim(to_char(0,'999999999999999.99'))) as aa from dual 
union
select decode(ceil(12.2354),'1','0'||trim(to_char(12.2354,'999999999999999.99')),'0','0'||trim(to_char(12.2354,'999999999999999.99')),trim(to_char(12.2354,'999999999999999.99'))) as aa from dual

上面的语句 分别会显示出

0.90,0.00,12.24

需要注意的是 

ceil(0.899)

此时返回1,如果参数0,返回的是0,当然我这里还可以简化,如使用floor这个函数

select decode(floor(0.899),'0','0'||trim(to_char(0.899,'999999999999999.99')),trim(to_char(0.899,'999999999999999.99'))) as aa from dual 
union
select decode(floor(0),'0','0'||trim(to_char(0,'999999999999999.99')),trim(to_char(0,'999999999999999.99'))) as aa from dual 
union
select decode(floor(12.2354),'0','0'||trim(to_char(12.2354,'999999999999999.99')),trim(to_char(12.2354,'999999999999999.99'))) as aa from dual

结果一样

0.90,0.00,12.24


lALPBbCc1SRzJO_MwM0Deg_890_192.png


这样基本上满足我的要求了


如果您觉得本文章对您有用,也为了更好的运营博客,您可以点击这里捐助

评论 抢沙发

昵称 (必填) 邮箱 (必填)
表情
  1. #1

    来自java 回复给的评论 (2017-11-23 19:51:56) 回复
    fdsfs