十进制数的 Oracle ceil

K R*_*thi 4 sql oracle plsql rounding

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

你怎么能在 PL/SQL 中做到这一点?

Ale*_*ole 5

一种方法是 do ceil(value*100)/100,但这似乎不雅。不确定有什么方法可以round按照您想要的方式行事。


Jon*_*ler 5

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

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

“舍入最近”的函数是ROUND,它允许您指定小数位数 (dp)。

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


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

ROUND(value+0.005, 2)
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为对于 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 功能才能让它按您的意愿工作。