近期在使用oracle to_char函数处理浮点数时发现有坑,这里做个小结:
网上可以找到关于to_char中使用fm9990.0099中的相关解释:
下面通过具体代码进行相关验证
--sql示例代码:
with tmp as
(select 2312320.012 n from dual union all
select 0.012322 n from dual union all
select 0.012564 n from dual union all
select -0.012 n from dual union all
select -10023 n from dual union all
select 8989898 n from dual)
select --全部为 9
to_char(t.n, '9999999999.9999999') all_9,
--全部为 9 同时使用 fm
to_char(t.n, 'fm999999999999999.9999999') all_fm9,
--全部为 0
to_char(t.n, '000000000.0000000') all_0,
--全部为 0 同时使用 fm
to_char(t.n, 'fm000000000.0000000') all_fm0,
--个位开始向右使用 0 向左使用9
to_char(t.n, '9999999990.0000000') some9one0,
--个位开始向右使用 0 向左使用9 同时使用fm
to_char(t.n, 'fm999999999999990.00000000') some9one0p0_fm,
--个位使用 0 同时使用fm
to_char(t.n, 'fm999999999999990.99999999') some9one0p9_fm,
--个位使用 0 前四位小数位使用 0 同时使用fm
to_char(t.n, 'fm999999999999990.0000999') some9one0p09_fm
from tmp t;
--执行结果:
--总结:
1、9在不同的地方可能会使用不同的占位符:整数位使用空格;小数位有有效数时使用0,无有效数时使用空格;
2、9对于绝对值小于1的小数的个位会处理成空格
3、fm只能用来删除9所产生的多余的占位符(空格或0),对于0产生的占位符无效。
--思考:
四舍五入可以通过控制9或0的个数实现。
如对本文有疑问, 点击进行留言回复!!
Oracle 基本概念 Dadabase,schema,user,table...
dbeaver连接Oracle中文乱码的解决方案--druid
Oracle常用语句(时间格式、去重、去特殊符号、查询表空间等)
Navicate 如何导出数据库中的存储过程、事件、视图等?
每日一记:Oracle升级2020年4月份的数据库补丁Database Patch Set Update : 11.2.0.4.200414 (30670774)
Oracle 19.3 dataguard for Redhat 7.6
网友评论