1. 首页 > 教育动态

深入解析:Oracle数据库中四种数字取整函数的奥秘

各位老铁们,大家好,今天由我来为大家分享深入解析:Oracle数据库中四种数字取整函数的奥秘,以及的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

在Oracle SQL中,提供了四种数字取整函数。从名称上,他们都是在取整,但是具体算法有所不同。

1、环境介绍和准备

这里选择Oracle 11gR2版本进行测试。

SQL>select * from v$version;

不同种类数据进行测试。

SQL>select * from t;

2、四种基本取整函数

Oracle中的四种有取证功能函数为:ceil、floor、trunc和round,每一个都有不同的含义和特点,适合不同的场景。

2.1、ceil

Ceil的原始含义是说:返回比当前值大的第一个整数。这里要注意“大”的概念,最简单的理解就是我们数学上的数轴。Ceil就是返回当前值在数轴往右第一个整数值。

SQL>select id, ceil(id) from t;

这里主要注意负数的ceil结果,和我们直观的想法有一些差异。而且ceil并没有进行四舍五入。

2.2、floor

Floor与ceil相对应,应该说是正好相反。ceil取定数轴右侧的第一个整数值。而Floor取定的是数轴左侧的第一个整数值,也就是取小的动作。

SQL>select id, floor(id) from t;

floor作用是找比当前值小的整数。

2.3、trunc

trunc是一个“多功能”函数。我们已经习惯其对date日期类型的处理方式。trunc输入参数是日期类型时,起到的是裁断天之后的时分秒信息。全部如期转为00:00:00。但trunc面对数字类型输入的时候,也会将小数点后面的数字截取。

SQL>select id, trunc(id) from t;

trunc对数字也没有“四舍五入”的概念,都是直接“截断处理”。

2.4、round

严格的说,只有round才算真正有“四舍五入”的选择动作。

SQL>select id, round(id) from t;

只有round才有我们通常意义的四舍五入动作。

3、取整函数的精度scale取值

这些取整函数,一些可以带一个可选参数,用来表示设置精度。当前我们数据为状态如下:

SQL>select * from t;

trunc和round是可以支持函数scale参数的。

SQL>select id, trunc(id,1), round(id,1) from t;

如果设置正数,那么返回的小数点后面的位数进行处理。如果我们设置负数呢?

SQL>select id, trunc(id,-1), round(id,-1) from t;

如果设置负数,就在小数点前面进行截取操作。

4、mod与remainder

mod取余数,我们经常用的“模”操作就是基于mod的操作。而remainder的功能也是取余数,两者有什么差别呢?

SQL>select mod(11,4), remainder(11,4) from dual;SQL>select mod(0,4), remainder(0,4) from dual;SQL>select mod(-11,4), remainder(-11,4) from dual;

当取余操作的两个参数都是整数的时候,我们基本看出什么问题。但是一旦出现负数,无论是除数还是被除数,mod的行为和经典余数模型有一些不同。

SQL>select mod(-11,-4), remainder(-11,-4) from dual;SQL>select mod(11,-4), remainder(11,-4) from dual;

精确的说,mod的函数取值为:n2-n1*floor(n2/n1)。所以,要注意在存在负数的时候,mod的问题。

remainder也有取余的效果,那么有什么不同的?要点就在计算公式的floor上面。对remainder而言,Oracle没有选择floor,而是round四舍五入。

总结

Oracle提供了很多自定义函数,用好他们、用对他们,可以给予我们很大帮助。

用户评论

哽咽

终于有人整理了这些功能!我每次使用的时候都得翻文档????, 这篇文章讲解很清楚,很容易理解。

    有19位网友表示赞同!

白恍

这篇文章真是太棒了! 我一直在学习Oracle数据库,这些数字取整函数一直让我感到困惑。感谢作者的详细解释和示例代码,我现在终于明白了!

    有13位网友表示赞同!

柠栀

四种种?感觉有点多啊... 如果能根据实际的使用场景来分类讲解,更容易记忆和理解。

    有12位网友表示赞同!

灬一抹丶苍白

我以前就知道 ROUND() 函数,其他三个好像很少用到,看来得好好学习一下了!感谢分享!

    有17位网友表示赞同!

淡淡の清香

这篇博文提到了很多常用的函数,但是希望作者能多补充一些更深入的用法,比如在复杂场景下如何选择合适的取整方式。

    有5位网友表示赞同!

棃海

FLOOR() 和 CEILING() 的用法经常容易混淆,这篇文章解释得很到位,我终于弄明白区别了!

    有8位网友表示赞同!

有一种中毒叫上瘾成咆哮i

Oracle数据库的数学函数真是很多, 还有很多我没有接触过, 希望能看到更多深入讲解的文章。

    有15位网友表示赞同!

﹏櫻之舞﹏

感觉这篇文章偏向于基础的介绍,如果能结合实际案例分析,更能体现这些函数的应用价值!

    有8位网友表示赞同!

枫无痕

我只想问一句:为什么还需要那么多取整函数呢?能不能简化一些?

    有7位网友表示赞同!

風景綫つ

我一直在使用ROUND() 函数,其他几个函数感觉不太实用,作者这篇文章是不是有点吹牛!?

    有8位网友表示赞同!

◆乱世梦红颜

这篇文章讲解的确实很好用,让我加深了对Oracle数据库数学函数的理解! 希望以后可以再看作者的其他文章。

    有13位网友表示赞同!

箜篌引

学习数据库真是不容易啊, 这些复杂的函数让人头疼。希望以后能看到更多易于理解的文章!

    有6位网友表示赞同!

心悸╰つ

这篇文章很有价值, 我正在学习 Oracle 数据库, 这篇关于取整函数的文章很有帮助!

    有19位网友表示赞同!

男神大妈

如果文章可以加入更具体的例子或者代码片段, 会更加直接易懂。

    有11位网友表示赞同!

古巷青灯

Oracle数据库真是太厉害了, 这些数字取整函数应用非常广泛!

    有5位网友表示赞同!

寻鱼水之欢

我平时很少使用 Oracle 数据库, 但是这篇文章让我对它的数学函数有了一个初步的了解!

    有13位网友表示赞同!

矜暮

希望能看到作者针对不同取整函数的实际应用场景进行深入分析和讲解。

    有19位网友表示赞同!

花花世界总是那么虚伪﹌

学习 Oracle 数据库感觉很漫长, 希望能够遇到更多像这样的详细实用教程!

    有6位网友表示赞同!

本文由发布,不代表千千择校网立场,转载联系作者并注明出处:https://www.qqzexiao.com/jydt/22543.html

联系我们

在线咨询:点击这里给我发消息

微信号:weixin888

工作日:9:30-18:30,节假日休息