在实际工作中,出现需要sql的查询结果中保留特定的小数位的情况,以下是在开发中用到过的几种方式,这些方式各有优劣,视具体需求而定:
测试环境:oracle 10g
方法一:保留2位小数,不够补0:
select to_char(123456789.9,'999999999.00') from dual
结果:
123456789.90
- 以上方法当值为零是会显示 .00而不是 0.00,可以使用decode简单处理
select decode(0,0,'0.00',trim(to_char(0.00000,'99999999999999.99'))) FROM dual;
- 该方法测试后,发现会在结果前出现空格,所以建议加上trim
- 该方法局限为,前面的数字的整数位应小于等于后面的整数位
方法二:
select to_char(123456789.1234,rpad('999999999.',11,'0')) from dual
结果:
123456789.12
- 该方法测试后,发现会在结果前出现空格,所以建议加上trim
方法三:
select round(1234.45,1) from dual
结果:
1234.5
- round会四舍五入,但是当原数值没有小数位时不会补充小数位
方法四:
select trunc(1234.45678,3) from dual
结果:
1234.456
- trunc直接截断,不会四舍无入
可能是因为本人技术不精,感觉使用oracle做有效位数的处理不是十分灵活,如果不是功能需要,建议还是放在后台代码或者前端脚本中处理更好些。