You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL特定规则自定义小数舍入逻辑实现咨询

解决Oracle SQL中的自定义小数舍入问题

嘿,我明白你要实现的这个舍入规则了——把小数部分0.01-0.05统一变成0.05,0.06-0.09变成0.10,整数部分保持不变对吧?其实有两种简洁的实现方式,我给你详细说说:

方法一:用数学公式(推荐,简洁高效)

这个方法利用CEIL函数向上取整的特性,通过简单的乘除运算就能完美匹配你的规则,代码非常简洁:

SELECT 
    original_value,
    CEIL(original_value * 20) / 20 AS rounded_value
FROM your_table;

原理说明:

  • 把原数值乘以20:这样0.01变成0.2,0.05变成1,0.06变成1.2,0.09变成1.8
  • 用CEIL取向上取整:0.2取整为1,1取整为1,1.2取整为2,1.8取整为2
  • 再除以20:1/20=0.05,2/20=0.10,刚好完全符合你的规则

验证示例:

original_valuerounded_value
1.011.05
1.051.05
1.061.10
1.091.10
2.002.00

方法二:用CASE表达式(更直观,适合复杂规则扩展)

如果你需要更清晰地看到逻辑分支,或者以后要扩展规则,用CASE表达式会更直观易懂:

SELECT 
    original_value,
    TRUNC(original_value) + 
    CASE 
        WHEN MOD(original_value, 1) BETWEEN 0.01 AND 0.05 THEN 0.05
        WHEN MOD(original_value, 1) BETWEEN 0.06 AND 0.09 THEN 0.10
        ELSE MOD(original_value, 1) -- 小数部分为0时保持原样
    END AS rounded_value
FROM your_table;

原理说明:

  • TRUNC(original_value)获取数值的整数部分(比如1.03的整数部分是1)
  • MOD(original_value, 1)提取小数部分(比如1.03的小数部分是0.03)
  • CASE语句根据小数部分的区间,加上对应的目标值即可

注意事项

如果你的业务需要处理负数,上述方法需要调整:

  • 对于负数,若要实现类似规则(比如-1.03舍入为-1.05,-1.06舍入为-1.10),可以把CEIL换成FLOOR:
    SELECT 
        original_value,
        FLOOR(original_value * 20) / 20 AS rounded_value
    FROM your_table;
    

内容的提问来源于stack exchange,提问作者dimas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:17:08