Oracle如何实现数字除以100后格式化保留两位小数?
Oracle数字格式化正确实现方案
问题核心是没有对原始数值做比例缩放:你需要的是将原整数视为精确到分的金额类整数表示,需要先除以100转换为常规数值后再做格式化。
正确执行语句
直接执行如下SQL即可得到符合预期的结果:
-- 输入21000 返回210.00 SELECT TO_CHAR(21000 / 100, '99990.00') FROM DUAL; -- 输入21123 返回211.23 SELECT TO_CHAR(21123 / 100, '99990.00') FROM DUAL;
如果需要去掉返回结果开头的默认占位空格,可以套一层TRIM函数:
SELECT TRIM(TO_CHAR(21000 / 100, '99990.00')) FROM DUAL;
格式说明
- 先做
/100运算:将原始整数缩小100倍,21000换算为210、21123换算为211.23,先匹配你需要的数值基准 - 格式化模板
99990.00的规则:- 开头的
9代表可选数字位,适配不同长度的整数部分 - 整数位最后一位用
0可以保证当数值小于1时也会显示整数部分的0,避免出现.23这类缺失整数位0的格式 - 末尾的
.00强制保留两位小数,不足的自动补0
- 开头的
之前尝试失败的原因
- 执行
select to_char(21000,'999.99') from dual;返回#####:该格式模板仅支持3位整数+2位小数,原始值21000是5位整数,长度超出模板可容纳范围,数据库返回#####作为溢出提示 - 执行
select to_char(21000,'99999.99') from dual;得到21000.00:没有做除以100的缩放操作,直接对原始值21000做格式化,自然得到和原始整数对应的结果,不符合你的预期
内容的提问来源于stack exchange,提问作者Bill Joson
相关产品推荐
相关产品推荐

