当前位置:首页 > 网站运营杂谈 > 正文

oracle四舍五入和取整有什么区别?小白也能懂的详细教程来了!

oracle四舍五入和取整有什么区别?小白也能懂的详细教程来了!

发现一个贼逗的事,好多人搞不清Oracle里四舍五入和取整那两个函数,总觉得都差不多。我前阵子给一个新来的小子讲,发现他一脸懵逼。我就说,得了,别听我叨叨,自己上手敲一...

发现一个贼逗的事,好多人搞不清Oracle里四舍五入和取整那两个函数,总觉得都差不多。我前阵子给一个新来的小子讲,发现他一脸懵逼。我就说,得了,别听我叨叨,自己上手敲一遍,比啥都强。所以今天就把我当时带着他实操的整个过程从头到尾给各位扒拉一遍。

一、简单粗暴的“截断”:TRUNC

我直接打开PL/SQL Developer,敲了个最简单的数字,比如定义一个数叫12.3456。我先用了那个叫TRUNC(Truncate)的函数,中文名叫“截断”或者“取整”。

这玩意儿的特点就是简单粗暴,它压根儿不看小数点后面是三还是八,直接就把后面的零头给扔了。就像你切菜一样,不要的那部分,啪,扔垃圾桶,毫不留情。

  • 我敲的:SELECT TRUNC(12.3456) FROM DUAL;
  • 它出来的是:12

然后我又试了一个大一点的数,比如12.876。

  • 我敲的:SELECT TRUNC(12.876) FROM DUAL;
  • 它出来的是:12

看,8也被砍了,这就是“截断”,只取整数部分,后面的一律不看,统统不要。

oracle四舍五入和取整有什么区别?小白也能懂的详细教程来了!

二、靠谱好用的“四舍五入”:ROUND

然后我换了ROUND这个函数。这个才是我们平时嘴里说的“四舍五入”。它聪明多了,会去看你小数点的第一位大不大。

我还是拿刚才那两个数试了试。

  • 我敲的:SELECT ROUND(12.876) FROM DUAL;
  • 它出来的是:13

这回它一看小数点后面是8,超过一半了(大于等于0.5),那就进一位,12变成13。很符合我们从小学的数学逻辑。

oracle四舍五入和取整有什么区别?小白也能懂的详细教程来了!
  • 我再用12.345敲了一遍:SELECT ROUND(12.345) FROM DUAL;
  • 它出来的是:12

后面是3,没到一半,老老实实地保持12,把后面的扔掉。这就叫“靠拢”,看远近来决定是进位还是舍弃。

三、保留位数时的重要区别

后来我又试了试,如果我想保留两位小数?这两个函数处理起来也不一样。

比如我的数是12.3456,我想保留到小数点后两位。

如果用ROUND:SELECT ROUND(12.3456, 2) FROM DUAL;。它一看第三位是5,那第二位的4就进位变成5。出来就是12.35。

要是换成TRUNC:SELECT TRUNC(12.3456, 2) FROM DUAL;。它直接把第三位和后面的所有数字全部砍了,出来就是12.34。

明白了吗? 简单的说,ROUND是帮你算对错,TRUNC是帮你切多余。

四、为什么我这么强调这个区别

为什么我对这玩意儿这么熟?妈的,那年我刚毕业,在一个小作坊公司干活。领导扔给我一个算提成的活,提成都要算到两位小数。我当时新手一个,搞不清 `ROUND` 和 `TRUNC`,寻思着取整不就是取整么,直接用 `TRUNC` 糊弄上去了。

结果?那批提成算出来,所有人的钱都少了一大截!一个销售急得跳脚,跑过来找我理论,说他这月少了几百块。我去查数据库,一条条比对,才发现我把四舍五入搞成了截断。

当时那个场景,我脸都绿了。晚上加班到凌晨三点,把几千条数据一条条回滚、重新计算,手敲得快抽筋了。第二天顶着俩黑眼圈去上班,发现那个销售还在楼下等着我。他一看我这狼狈样,也没好意思再骂我,只说钱到账了就行,让我以后仔细点。我TM差点想辞职。

从那以后,我彻底把这俩函数刻进脑子了。每次写关于钱的SQL,手一抖,就想起那年凌晨三点的冷风和差点把我骂哭的销售。所以说,别光看文档,自己动手实践了,印象才深刻。别学我,犯了错才长记性。

最新文章