Oracle Round

ROUND( number, [ decimal_places ] )
number : 需处理的数值
decimal_places : 四舍五入 , 小数取几位 ( 预设为 0 )

SELECT ROUND (123.456) FROM DUAL;  -- 四舍五入取整 ,返回123        
SELECT ROUND (0.456,2) FROM DUAL;  --作用保留两位小数,返回0.46
SELECT ROUND (0.456,2)||'%' FROM DUAL;  --想要显示的结果为0.46%,但实际显示结果为 .46%,这是由于Oracle中数字转为字符串时舍弃了以0起始的整数位部分

--关联测试
SELECT TO_CHAR (0.456) FROM DUAL  --直接数字转字符串,返回.456
SELECT '%'||0.456||'%' FROM DUAL  --返回%.456%
--可见当oracle 判断出该列为字符串格式的时候,先进行的是格式转换(即由0.456 数字型转为.456字符串类型),再进行拼接。

--正常显示0.46%的方式 使用格式化字符串TO_CHAR(number,'fm999999999.99')
--比较观察下面两种输入fm后的值及返回的结果
SELECT TO_CHAR(ROUND (0.456,2),'fm999999999.99') FROM DUAL; --返回结果 .46
SELECT TO_CHAR(ROUND (0.456,2),'fm999999990.99') FROM DUAL; --返回结果 0.46
--关键在于小数点前格式字符时是0还是9;再看一个例子
SELECT TO_CHAR(0.4,'fm999999990.99') FROM DUAL; --返回结果 0.4
SELECT TO_CHAR(0.4,'fm999999990.90') FROM DUAL; --返回结果 0.40
--这样可以很明显的看出格式字符串中0和9格式化后的区别,即当为数值位上为0时需要显示的则格式字符串上该位置为0,无需显示的为9


PS:若有任何其他见解请留言,大家共同进步探讨,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值