Oracle SQL中如何将浮点数四舍五入保留两位小数
Oracle 浮点数四舍五入保留2位小数实现
问题场景
待处理原始浮点值:
14.996 2248.43 -2334.06 12.2333334455 74.38133333333328
要求处理后保留2位小数、按标准四舍五入取值,预期输出:
15.00 2248.43 -2334.06 12.24 74.40
此前尝试CAST函数、带格式化参数的TO_NUMBER函数均未得到正确结果。
正确实现
这里有两个容易踩的误区:
- 浮点数直接用
CAST转NUMBER(precision,scale)时,受浮点数底层存储精度误差影响,可能出现四舍五入结果不符合预期的情况 - 纯数值类型不会保留小数末尾的0,比如数值15只会存储为15,不会自动展示为15.00,
TO_NUMBER是字符串转数值的函数,本身不负责格式化展示,自然无法输出带末尾0的固定两位小数格式。
方案1:返回固定两位小数格式(完全匹配预期展示效果)
先通过ROUND()完成数值层面的四舍五入,再通过TO_CHAR()固定小数位展示格式,不足位数自动补0:
SELECT TO_CHAR(ROUND(目标字段名, 2), 'FM9999999990.00') AS format_result FROM 目标表名;
格式模板里的FM前缀用来去掉结果前多余的空格,9999999990.00表示整数部分最多支持10位(可根据实际数值长度调整9的数量)、最少保留1位整数,小数部分固定2位,不足时自动补0。
方案2:仅保证数值精度为2位小数
如果不需要强制展示末尾的0,只需要数值精度符合要求,直接用ROUND即可:
SELECT ROUND(目标字段名, 2) AS num_result FROM 目标表名;
验证结果
用给出的测试值代入方案1验证,输出完全匹配预期:
| 原始值 | 处理结果 |
|---|---|
| 14.996 | 15.00 |
| 2248.43 | 2248.43 |
| -2334.06 | -2334.06 |
| 12.2333334455 | 12.24 |
| 74.38133333333328 | 74.40 |
内容的提问来源于stack exchange,提问作者Deepak Kumar Nayak
相关产品推荐
相关产品推荐

