Oracle ceil为十进制数字

时间:2010-09-10 07:03:14

标签: sql oracle plsql rounding

当舍入到2位小数时,值4.01132141将四舍五入为4.02,因为它超过4.01。

如何在PL / SQL中执行此操作?

5 个答案:

答案 0 :(得分:4)

“向上舍入”的函数是CEIL,但它会生成一个整数。

“向下舍入”的函数是FLOOR,但它也会生成一个整数。

'round nearest'的函数是ROUND,它允许你指定一个小数位数(dp)。

注意CEIL舍入为整数;要舍入到2 dp,你必须乘以100,使用CEIL,然后除以100。


要合理地直接得到答案,请使用:

ROUND(value+0.005, 2)

这是有效的,因为对于4.01132141的示例数据,传递给ROUND的值是4.01632,当舍入到2 dp时,它变为4.02。如果值开始为4.0593,那么传递给ROUND的值将是4.0643,当舍入到2 dp时,根据需要变为4.06。

那里有几个棘手的东西:

  1. 如果dp的数量变化,则要添加的值(在该示例中为0.005)变化。您可以创建一个表来保存一列中的小数位数,并将舍入值添加到另一列中。或者,您可以使用幂等于10的表达式
  2. 确定负数的正确行为。 -4.01132141会变成-4.02还是-4.01?您可能需要使用SIGN和ABS功能才能使其正常工作。

答案 1 :(得分:3)

一种方法是做ceil(value*100)/100,但这看起来不够优雅。不确定是否有任何方法可以使round按照您想要的方式运行。

答案 2 :(得分:1)

我遇到了同样的问题,并提出了以下声明,到目前为止一直运作良好。

select 4.01132141+(mod((ceil(4.01132141)-4.01132141)*1000,10)/1000) from dual

答案 3 :(得分:0)

从双

中选择4.01132141,CEIL(4.01132141 * 100)/ 100

答案 4 :(得分:0)

您可以在PLSQL中使用它进行舍入: ROUND(UrNo +(5 / POWER(10,DecimalPlaces + 1)),DecimalPlaces)